我有以下POJO:
@Entity(name = "member")
@Table(name = "member")
public class Member {
@Column(name = "identifier")
@Id
@GeneratedValue
private int mIdentifier;
@Column(name = "name", columnDefinition = "text")
private String mName;
@ManyToMany(mappedBy = "mMembers")
private Set<Project> mProjects = new HashSet<Project>();
public int getIdentifier() {
return mIdentifier;
}
public String getName() {
return mName;
}
public void setName(final String pName) {
mName = pName;
}
public Set<Project> getProjects() {
return mProjects;
}
public Member() {
}
}
和
@Entity(name = "project")
@Table(name = "project")
public class Project {
@Column(name = "identifier")
@Id
@GeneratedValue
private int mIdentifier;
@ManyToMany(cascade = CascadeType.ALL)
private Set<Member> mMembers = new HashSet<Member>();
public int getIdentifier() {
return mIdentifier;
}
public Set<Member> getMembers() {
return mMembers;
}
public Project() {
}
}
我想了解为什么会有效:
Project project = new Project();
Member member = new Member();
member.setName("John Snow");
project.getMembers().add(member);
db.save(project);
db.save(member);
我想了解为什么这不起作用:
Project project = new Project();
Member member = new Member();
member.setName("John Snow");
member.getProjects().add(project); // this is different
db.save(project);
db.save(member);
在第二个代码中,连接表中没有条目(在项目和成员之间)。
这里的常见做法是什么?
答案 0 :(得分:0)
在双向关联中,始终存在所有者方和反方。
Hibernate只考虑所有者方。
所有者方是没有mappedBy
属性的方。
通常的做法是通过向项目的和项目添加成员来确保对象图是一致的。如果您只做一个,请确保更新所有者。
答案 1 :(得分:0)
未声明mappedBy
的实体的另一方被视为该关联的所有者。
因此,您的代码mappedBy
已在Member
中声明,因此该关联的所有者为Project
。因此,仅当您将Member's
添加到Project's