hibernate创建用户与朋友的关系

时间:2012-12-13 04:45:49

标签: hibernate one-to-many hibernate-mapping

我正在使用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,它解释了一个带有连接表的双向一对多/多对一 这是否允许我创建用户与朋友的关系,而无需复制用户表(对于朋友)?

谢谢!

2 个答案:

答案 0 :(得分:1)

您正在寻找的是“在Hibernate中进行多对多自引用”

在下面的例子中,员工可以有很多同事:

Self reference many to many

@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
}

请参阅教程:Many to many hibernate self referencing

答案 1 :(得分:-1)

尝试两个表:

Users -- with your user information
user_friends -- with two user_ids representing a friendship.

您的业务逻辑可以指示关系是双向还是单向。