我有一张桌子,现在我想表达一个像#34;最好的朋友"这样的关系。假设一个人只能有一个最好的朋友,我不想改变Person表来添加一个最好的朋友列,而是想要一个额外的映射表,例如:
表人(身份名称):
1 foo
2 bar
3某人
4 somebodyelse
表BestFriendMapping(personId bestfriendId):
1 2
3 4
我做的是这样的事情:
class Person {
@OneToOne()
@Fetch(FetchMode.SELECT)
@JoinTable(name = "BestFriendMapping",
joinColumns = @JoinColumn(name = "personId", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "bestfriendId",
referencedColumnName = "id"))
private Person bestFriend;
}
问题是,现在当我添加一个新的Person时,映射表中填充了两个条目,例如新添加的Person有id = 10和他的bestFriend 20,那么条目是:
10 20
20 10
我想只有一个条目,但仍然能够得到一个人最好的朋友,无论我手中有哪一个。我发现我可能已经做了两个单向而不是一个双向映射,所以我必须使用mappedBy,但我不确定当它是关于同一个实体对象时的语法是什么,因此一个和对象内的相同字段。互联网上的示例总是通过映射表显示两个实体的映射。
或者这样的事情?!?除了JoinColumns和InverseJoinColumns之外,还将mappedBy添加到OnetoOne,就像这个@OneToOne(mappedBy="bestFriend")
一样奇怪:)