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,但看起来好像您在使用该注释,因此很可能是从您mappedByParent注释中使用的事实推断出来的。

您可以在此处了解更多信息。

以上是 JPA @OneToMany-&gt;父级-子级参考(外键) 的全部内容, 来源链接: utcz.com/qa/408065.html

回到顶部