[英]hibernate - add relation (many-to-many)
我有以下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);
在第二个代码中,联接表中(项目和成员之间)没有添加任何条目。
这是什么惯例?
在双向关联中,总是有一个所有者方和一个反向方。
Hibernate仅考虑所有者方。
所有者端是不具有mappedBy
属性的端。
通常的做法是,通过将一个成员添加到其项目中并将该项目添加到其成员中,来确保对象图是一致的。 如果您仅执行一项操作,请确保更新所有者。
未声明mappedBy
的实体的另一端被视为关联的所有者。
因此,在您的代码中, mappedBy
是在Member
声明的,因此关联的所有者是Project
。 因此,仅当您将Member's
添加到Project's
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.