JPA使用关联表在同一对象上进行一对一双向映射

时间:2017-09-01 17:17:22

标签: jpa one-to-one bidirectional

我有一张桌子,现在我想表达一个像#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")一样奇怪:)

0 个答案:

没有答案