JPA中的自引用字段映射

Hay*_*nce 5 java jpa eclipselink

让我们说我们有User实体类.用户可以与其他用户成为朋友.如何在不创建名为Connection的新实体或在数据库中创建多个条目的情况下映射此自引用集合字段?

@Entity
public class User {
...
@ManyToMany
private Collection<User> friends;
...
}

USER_ID-FRIEND_ID
1 - 2
2 - 1 (duplicate... I don't need it)
Run Code Online (Sandbox Code Playgroud)

Dew*_*wfy 6

以下是我的ElementEntity代码的快照:

@OneToMany(mappedBy = "parent", fetch = FetchType.LAZY)
private List<ElementEntity> children;

@JoinColumn(name = "ParentId", referencedColumnName = "ElementId")
@ManyToOne(fetch = FetchType.LAZY)
private ElementEntity parent;
Run Code Online (Sandbox Code Playgroud)

在数据库上有哪些字段:

  • ElementId - 首要的关键;
  • ParentId 与父母的关系

  • @HayatiGuvence出了什么问题 - 只需将ParentId重命名为USER_ID,将elementId重命名为friend_Id (3认同)

Boz*_*zho 2

你不能——你需要数据库中的两条记录。

实际上,对于友谊关系,我认为像 Neo4j 这样的图形数据库是正确的选择。在那里你有两个用户,只需添加一个边缘“朋友”。

  • 这个答案不正确。自引用多对多关系是有效的,可以在 JPA 中映射,而无需定义任何新实体。该关系需要一个桥接表,就像所有多对多关系一样。 (4认同)