【发布时间】:2010-07-27 17:21:25
【问题描述】:
我不确定建立双向单机关系(休眠引擎)缺少什么。领域模型的缩小版:
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 保持关系。 “personFrom”字段为空,但我认为这是正常的,因为关系是通过连接表维护的。
我也尝试在关系中指定连接列,但没有任何区别。任何帮助,高度赞赏。 谢谢。
编辑: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;
}
Role 也与 Person 相关,但我认为保留 personFrom、personTo 有助于优化我的查询。
Role extends Model {
@ManyToOne
public RoleType roleType;
@ManyToOne
public Person createdBy;
}
【问题讨论】:
-
Relationship是否只有如图所示的两个字段?这将使它有资格进行@JoinTable简化。 -
感谢 Dan,我通过您的评论了解了 @JoinTable。请查看域模型的更新。