hibernate创建用户到朋友的关系

hibernate创建用户到朋友的关系,hibernate,one-to-many,hibernate-mapping,Hibernate,One To Many,Hibernate Mapping,我正在使用hibernate并试图表示一种用户对朋友的关系。我的第一个想法是用一组朋友对象创建一个用户对象 我想要一个包含所有用户和信息的用户表,如: 用户表:名字、姓氏等 然后是一个用户朋友表来管理这些关系。比如: *User\u Friend表:id,userId,friendIduserId* 一个用户会有很多FriendID 我已经为用户对象创建了一个表和映射: <id name="id" type="int"> <column name="userId

我正在使用hibernate并试图表示一种用户对朋友的关系。我的第一个想法是用一组朋友对象创建一个用户对象

我想要一个包含所有用户和信息的用户表,如:

用户表:名字、姓氏等

然后是一个用户朋友表来管理这些关系。比如:

*User\u Friend表:id,userId,friendIduserId*

一个用户会有很多FriendID

我已经为用户对象创建了一个表和映射:

<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表中保留朋友信息,如first name、last name等,并在user\u friend表中保留关系,那么我的朋友对象的映射会是什么样子

我应该把朋友当作基本用户吗?如果是,我会将上面的User\u Friend表更改为User表吗

编辑: 我发现这解释了一个双向的一对多/多对一连接表。 这是否允许我创建一个用户到朋友的关系,而无需为朋友复制用户表

谢谢

尝试两个表格:

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

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

您正在寻找的是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
}
请参见教程: