1

我正在使用休眠并试图代表用户与朋友的关系。我的第一个想法是用一组朋友对象创建一个用户对象。

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

用户表:名字、姓氏等

然后是一个 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 表吗?

编辑: 我发现了这个指向休眠参考的链接,它解释了一个双向的一对多/多对一与连接表。
这是否允许我在不复制用户表(为朋友)的情况下创建用户到朋友的关系?

谢谢!

4

2 回答 2

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
}

见教程:多对多休眠自引用

于 2012-12-13T10:10:11.327 回答
-1

尝试两个表:

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

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

于 2012-12-13T05:05:39.377 回答