我正在使用hibernate并尝试将用户表示为朋友关系。我的第一个想法是使用一组友元对象创建一个用户对象。
我想要一个包含所有用户和信息的用户表:
用户表:名字,姓氏等
然后是User_Friend表来管理关系。类似的东西:
* User_Friend表:id,userId,friendId(userId)*
用户会有很多friendIds。
我为用户对象创建了一个表和映射:
<id name="id" type="int">
<column name="userId" />
<generator class="native" />
</id>
<set name="friends" table="User_Friend???"
inverse="true" lazy="true" fetch="select">
<key>
<column name="userId" not-null="true" />
</key>
<many-to-many entity-name="Friend">
<column name="friendId" not-null="true" />
</many-to-many>
</set>
<property name="firstName" type="string"></property>
<property name="lastName" type="string"></property>
<property name="email" type="string"></property>
如果我想在用户表中保留朋友信息(如名字,姓氏等)以及像User_Friend这样的表中的关系,我的朋友对象的映射会是什么样?
我应该像朋友一样处理朋友吗?如果是这样,我会将上面的User_Friend表更改为User表吗?
编辑: 我找到了这个link to hibernate ref,它解释了一个带有连接表的双向一对多/多对一 这是否允许我创建用户与朋友的关系,而无需复制用户表(对于朋友)?
谢谢!
答案 0 :(得分:1)
您正在寻找的是“在Hibernate中进行多对多自引用”
在下面的例子中,员工可以有很多同事:
@Entity
@Table(name="EMPLOYEE")
public class Employee {
//id, firstname, lastname
@ManyToMany(cascade={CascadeType.ALL})
@JoinTable(name="EMPLOYEE_COLLEAGUE",
joinColumns={@JoinColumn(name="EMPLOYEE_ID")},
inverseJoinColumns={@JoinColumn(name="COLLEAGUE_ID")})
private Set<Employee> colleagues = new HashSet<Employee>();
@ManyToMany(mappedBy="colleagues")
private Set<Employee> teammates = new HashSet<Employee>();
// Getter and Setter methods
}
答案 1 :(得分:-1)
尝试两个表:
Users -- with your user information
user_friends -- with two user_ids representing a friendship.
您的业务逻辑可以指示关系是双向还是单向。