尝试编写具有一对一关系的两个表,但joinColumn变为null

MMX

我在网页上有一个表单,需要将其放入两个不同的表中,即appinfo和preferences。appinfo和首选项均具有自动生成的ID。appinfo还包含一个外键,称为“ preferenceid”。我需要使用休眠模式将自动生成的首选项表ID输入此字段。

我已经使用SpringMVC创建了两个POJO,并试图将它们写入数据库。基本格式为:

Preferences.java:

@Entity
@Table (name ="preferences")
public class Preferences implements Serializable {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int preferencesid;
    (Other variables with getters and setters)

    @OneToOne
    @JoinColumn(name="preferencesid", referencedColumnName="preferenceid")
    private AppInfo ai;
    public AppInfo getAi() {
        return ai;
    }

    public void setAi(AppInfo ai) {
        this.ai = ai;
    }

AppInfo.java

@Entity
@Table (name ="appinfo")
public class AppInfo implements Serializable {
    @Id
    @Column(name = "appuserid")
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id;

    @OneToOne
    @JoinColumn(name="preferenceid", referencedColumnName="preferencesid")
    private Preferences p;
    (Other variables and getters and setters)
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public Preferences getP() {
        return p;
    }

    public void setP(Preferences p) {
        this.p = p;
    }

当我保留数据时,“首选项”工作正常,它会自动生成其id值。但是我的AppInfo没有正确获取preferencesid。它只有null。如果我更改表以允许为空,则两者都将插入所有正确的信息,但AppInfo表中的preferencesid现在为空。

tharindu_DG

选项1

如果您要AppInfo保留外键,PreferencesPreferences无需使用外键AppInfo,则进行如下更改。

从首选项中删除映射

     @Entity
     @Table (name ="preferences")
     public class Preferences implements Serializable {

     //    @OneToOne(mappedBy)
     //    @JoinColumn(name="preferencesid", referencedColumnName="preferenceid")
     //    private AppInfo ai;

并在中指定级联类型 AppInfo

@Entity
@Table (name ="appinfo")
public class AppInfo implements Serializable {

    @OneToOne(cascade = CascadeType.PERSIST)
    @JoinColumn(name="preferenceid", referencedColumnName="preferencesid")
    private Preferences p;

如果要创建它,cascade = CascadeType.ALL则需要按以下方式保存实例。

    AppInfo ai = new AppInfo();     
    Preferences p = new Preferences();

    ai.setP(p);     
    session.persist(ai); 

如果设置为cascade = CascadeType.ALL,则可以使用session.save(ai);


选项2

如果您希望两个表之间都保持外键,则进行如下更改。

@Entity
@Table (name ="appinfo")
public class AppInfo implements Serializable {
    ....
    @OneToOne(cascade = CascadeType.PERSIST)
    @JoinColumn(name="preferenceid")
    private Preferences p;



@Entity
@Table (name ="preferences")
public class Preferences implements Serializable {
    ....
    @OneToOne(cascade = CascadeType.PERSIST)
    @JoinColumn(name="appuserid")
    private AppInfo ai;

CascadeType.All如果需要,将级联类型更改为保存实例时,

    AppInfo ai = new AppInfo();     
    Preferences p = new Preferences();

    ai.setP(p);     
    p.setAi(ai);

    session.persist(ai);

希望这可以帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

JPA:如何保存具有一对一关系的两个实体?

来自分类Dev

如何使用Hibernate保存具有一对一关系的两个类?

来自分类Dev

使用两个原理表在SQL Server中实现一对一关系

来自分类Dev

插入到一对一关系中的两个表中

来自分类Dev

具有一对一关系的JPA @JoinColumn批注

来自分类Dev

具有一对一关系的JPA @JoinColumn批注

来自分类Dev

Entity Framework Core上与同一表的两个一对一关系

来自分类Dev

多表继承模型与相同两个模型之间简单的一对一关系有什么区别?

来自分类Dev

雄辩的一对一关系和两个自定义字段

来自分类Dev

学说–如何在两个实体之间建立一对一关系

来自分类Dev

Django中两个模型(字段)与当前模型的一对一关系

来自分类Dev

如何在bash中的两个循环之间创建一对一关系?

来自分类Dev

雄辩的一对一关系和两个自定义字段

来自分类Dev

尝试从具有一对多关系的两个表中插入select

来自分类Dev

SQLite-Net Extension两个实体之间的一对一关系和一对多关系

来自分类Dev

应该将包含一对一关系的大型Blob的频繁访问的表进行规范化,并将列拆分为两个表吗?

来自分类Dev

哪个表具有一对一关系中的外键有关系吗?

来自分类Dev

当“父”表具有复合PK时,如何在JPA中建立一对一关系的模型?

来自分类Dev

实体框架6:具有继承关系的一对一关系

来自分类Dev

如果关系具有属性,如何实现一对一关系?

来自分类Dev

SQL一对一关系与单个表

来自分类Dev

亲子一对一关系表

来自分类Dev

Symfony2一对一关系表

来自分类Dev

访问一对一关系表

来自分类Dev

使用INTERLEAVE表进行一对一关系

来自分类Dev

MySQL:一对一关系表合并

来自分类Dev

SQL 表:与自身创建一对一关系?

来自分类Dev

Laravel 4.2一对一关系返回NULL

来自分类Dev

在两个表之间具有2个一对多关系是否可以接受?

Related 相关文章

  1. 1

    JPA:如何保存具有一对一关系的两个实体?

  2. 2

    如何使用Hibernate保存具有一对一关系的两个类?

  3. 3

    使用两个原理表在SQL Server中实现一对一关系

  4. 4

    插入到一对一关系中的两个表中

  5. 5

    具有一对一关系的JPA @JoinColumn批注

  6. 6

    具有一对一关系的JPA @JoinColumn批注

  7. 7

    Entity Framework Core上与同一表的两个一对一关系

  8. 8

    多表继承模型与相同两个模型之间简单的一对一关系有什么区别?

  9. 9

    雄辩的一对一关系和两个自定义字段

  10. 10

    学说–如何在两个实体之间建立一对一关系

  11. 11

    Django中两个模型(字段)与当前模型的一对一关系

  12. 12

    如何在bash中的两个循环之间创建一对一关系?

  13. 13

    雄辩的一对一关系和两个自定义字段

  14. 14

    尝试从具有一对多关系的两个表中插入select

  15. 15

    SQLite-Net Extension两个实体之间的一对一关系和一对多关系

  16. 16

    应该将包含一对一关系的大型Blob的频繁访问的表进行规范化,并将列拆分为两个表吗?

  17. 17

    哪个表具有一对一关系中的外键有关系吗?

  18. 18

    当“父”表具有复合PK时,如何在JPA中建立一对一关系的模型?

  19. 19

    实体框架6:具有继承关系的一对一关系

  20. 20

    如果关系具有属性,如何实现一对一关系?

  21. 21

    SQL一对一关系与单个表

  22. 22

    亲子一对一关系表

  23. 23

    Symfony2一对一关系表

  24. 24

    访问一对一关系表

  25. 25

    使用INTERLEAVE表进行一对一关系

  26. 26

    MySQL:一对一关系表合并

  27. 27

    SQL 表:与自身创建一对一关系?

  28. 28

    Laravel 4.2一对一关系返回NULL

  29. 29

    在两个表之间具有2个一对多关系是否可以接受?

热门标签

归档