我不确定我缺少什么来建立一个双向的一对多关系(Hibernate引擎)。以下是一个精简版的领域模型:
class Person {
@OneToMany(mappedBy="personFrom", cascade = CascadeType.PERSIST)
public List<Relationship> relationships;
}
class Relationship {
@ManyToOne
public Person personFrom;
@ManyToOne
public Person personTo;
}
一些观察结果:
1. 使用以上映射,不会创建联接表。
2. 当我移除mappedBy(@OneToMany(cascade = CascadeType.PERSIST))时,联接表被创建并且我可以通过Person持久化Relationship。"personFrom"字段为空,但我认为这是正常的,因为关系是通过联接表维护的。
我也尝试在Relationship中指定联接列,但没有任何区别。非常感谢任何帮助。 谢谢。
编辑:1
根据Dan的评论,如果需要查看域类的完整内容,我已将其展开如下。
class Relationship extends Model{
@ManyToOne
public RelationshipType relationshipType;
@ManyToOne
public Person personFrom;
@ManyToOne
public Person personTo;
@ManyToOne
public Person createdBy;
@ManyToOne
public Role roleFrom;
@ManyToOne
public Role roleTo;
@Override
public String toString() {
return relationshipType.toString();
}
}
class Person extends Model {
public Date dateCreated;
@Lob
public String description;
@OneToMany(cascade = CascadeType.ALL)
public List<Role> roles;
@OneToMany(mappedBy="personFrom", cascade = CascadeType.PERSIST)
public List<Relationship> relationships;
}
角色也与人相关,但我认为保留personFrom和personTo有助于优化我的查询。
Role extends Model {
@ManyToOne
public RoleType roleType;
@ManyToOne
public Person createdBy;
}
Relationship
只有如图所示的两个字段吗?这将使其符合@JoinTable
简化的条件。 - Dan LaRocque