繁体   English   中英

使用 Java Hibernate 和 Z9CE3D1BD8890F916A0C44809 获得 model 友谊的最佳方式是什么

[英]What's the best way to model Friendship using Java Hibernate and JPA

假设我有一个 Person 实体。

一个人可以与一个或多个其他人建立“友谊”关系。

我会 model ,比如说,表中的一个条目

| Person Id 1 | Person Id 2 |

但是,从语义上讲,如果人 1 是人 2 的朋友

| Person Id 1 | Person Id 2 |

相当于说第 2 个人是第 1 个人的朋友

| Person Id 2 | Person Id 1 |

当然,在 Java 和查询中有很多方法,例如((person1=x AND person2=y) OR (person1=y AND person2=x))我会确保这种等价性得到尊重。 但是,在数据库本身以及随后的存储库、JPQL 查询等中,model 的更有效方法是什么?

总结一下 我希望能够检查人 1 是否是人 2 的朋友,而无需进行两次检查 - (人 1 与人 2 的朋友)(人 2 与人 1 的朋友)。 习惯上,我只想说(是第 1 个人和第 2 个人的朋友)。

我想隐含地 model 等价于 A 与 B 成为朋友,然后 B 自动与 A 成为朋友。

  • 以下人实体class
    @Entity
    public class Person {

    //Id and properties

      @ManyToMany
      @JoinTable(name="friendship", 
                joinColumns={@JoinColumn(name="person_id")}, 
                inverseJoinColumns={@JoinColumn(name="friend_id")})
       private Set<Person> friends = new HashSet<Person>();

       // Getter and Setter methods
     }
  • 它将生成一个person表和一个friendship表。 person表将只包含与Person相关的信息,而friendship表将只有两列person_idfriend_id来保持关系。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM