Jpa OneToMany不会坚持孩子

Bru*_*tos 6 jpa jpa-2.0

我对OneToMany字段的持久性感到麻烦.这是我用来进行测试的两个简化类.

public class User implements Serializable {
...
private String name;
...
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
private List<PhoneNumber> phoneNumbers;
...
}

public class PhoneNumber implements Serializable {
...
private String phoneNumber;
...
@ManyToOne()
private User  user;
...
}
Run Code Online (Sandbox Code Playgroud)

所以我想这样做:

User u = new User();
PhoneNumber p = new PhoneNumber();
u.setName("Alan");
u.getPhoneNumbers.add(p);
Run Code Online (Sandbox Code Playgroud)

但是当我坚持用户时,phoneNumber孩子不会自动保留.以OO的方式,我只需要做一对多的构图.

我使用EclipseLink.

非常感谢所有人的提示.

Mat*_*ndy 3

您需要建立两个方向的关系。添加p.setUser(u)到您的代码:

User u = new User();
PhoneNumber p = new PhoneNumber();
u.setName("Alan");
u.getPhoneNumbers.add(p);
p.setUser(u);
Run Code Online (Sandbox Code Playgroud)

  • 是因为 PhoneNumber 是关系的反面吗?我已经成功地保留了上面讨论的结构,而没有设置关系的第二方。PhoneNumber.user 设置为 null,但已成功保留。看一下 JPA 2.0 规范 3.2.4“托管实体之间的双向关系将根据关系的拥有方持有的引用进行持久化。开发人员有责任将内存中的引用保留在拥有方,并且那些在反面持有的,当它们改变时彼此保持一致” (2认同)