JPA @OneToMany->父级-子级参考(外键)
我有一个关于从子实体ir引用ParentEntities的问题,如果我有这样的事情:
Parent.java:
@Entity(name ="Parent")public class Parent {
@Id
@Generate.....
@Column
private int id;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "parent")
private Set<Child> children;
simple ... getter and setter ...
}
和Child.java:
@Entity(name ="Child")public class Child{
@Id
@Generate....
@Column
private int id;
@ManyToOne
private Parent parent;
... simple getter an setter
}
将创建以下表:
Parent: int id
Child:
int id
int parent_id (foreign key: parent.id)
好的,到目前为止,一切都很好。但是,当涉及到使用Java的Reference时,我想,您可以做这样的事情。
@Transactional public void test() {
Parent parent = new Parent();
Child child = new Child();
Set<Child> children = new HashSet<Child>();
children.add(child);
parent.setChildren(children);
entityManager.persist(parent);
}
这导致在数据库中:
Parent: id
100
Child
id paren_id
101 100
但是事实并非如此,您必须明确地将“父级”设置为“子级”(我认为框架可能可以单独执行)。
因此,数据库中真正是什么:
Parent: id
100
Child
id paren_id
101 (null)
因为我还没有把父母定为孩子。所以我的问题:
Parent.java:
...setChildren(Set<Child> children) {
for (Child child : children) {
child.setParent.(this);
}
this.children = children;
}
...
编辑:
根据快速答复,我能够通过使用引用拥有实体上的@JoinColumn解决此问题。如果我们从上面举这个例子,我确实做了。像这样:
Parent.java:
@Entity(name ="Parent") public class Parent {
@Id
@Generate.....
@Column
private int id;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name= "paren_id")
private Set<Child> children;
simple ... getter and setter ...
}
和Child.java:
@Entity(name ="Child")public class Child{
@Id
@Generate....
@Column
private int id;
... simple getter an setter
}
现在,如果我们这样做:
@Transactional public void test() {
Parent parent = new Parent();
Child child = new Child();
Set<Child> children = new HashSet<Child>();
children.add(child);
parent.setChildren(children);
entityManager.persist(parent);
}
家长正确设置了参考:
Parent: id
100
Child
id paren_id
101 100
感谢您的答案。
回答:
我真的必须做某事吗?像这样?
那是一种策略,是的。
在双向关系中,关系具有“拥有”和“非拥有”的一面。由于您的情况下的拥有方是on
Child
,因此您需要在此处设置关系以使其持久。拥有方通常由您指定的位置确定@JoinColumn
,但看起来好像您在使用该注释,因此很可能是从您mappedBy
在Parent
注释中使用的事实推断出来的。
您可以在此处了解更多信息。
以上是 JPA @OneToMany->父级-子级参考(外键) 的全部内容, 来源链接: utcz.com/qa/408065.html