簡體   English   中英

Hibernate OneToMany生成了外鍵

[英]Hibernate OneToMany generated foreign key

我有以下表結構:

parent(parentId)
child(childId, parentId fk)

然后,我有以下對象:

@Entity
@Table(name = "parent")
public class Parent {
   @Id
   @GeneratedValue(...)
   private String id;

   @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
   @JoinColumn(name = "parentId")
   Set<Child> children
}

@Entity
@Table(name = "child")
public class Child {
   @Id
   @GeneratedValue(...)
   private String id;

   @Column(...)
   private String parentId;

}

現在,我創建一個臨時父和子,並將子項添加到父項,然后保存父項:

Parent parent = new Parent();
parent.children.add(new Child());

parentDao.save(parent);

我得到了例外:

org.hibernate.PropertyValueException: not-null property references a null or transient value

我的問題:如何讓子類中的parentId自動設置為父插入所生成的值?

我會重新安排你的類結構如下:

@Entity
@Table(name = "parent")
public class Parent {
   @Id
   @GeneratedValue(...)
   private String id;

   @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
   @JoinColumn(name = "parentId")
   Set<Child> children
}

@Entity
@Table(name = "child")
public class Child {
   @Id
   @GeneratedValue(...)
   private String id;

   @Column(...)
   private Parent parent;

}

然后,當hibernate獲取父類並初始化子集時,子類將具有對父類的引用。 然后要獲取parentId,您將調用:

Child c = new Child()....
c.parent.id;

您的孩子不應該擁有private String parentId ,而應該擁有private Parent parent ,並且當您是parent.children.add(child) ,您還必須具有child.setParent(parent) 請參閱Hibernate參考中的原型父子關系示例和注釋引用的bidi一對多部分

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM