1

私は休止状態を使用しており、ユーザーと友人の関係を表現しようとしています。私の最初の考えは、友達オブジェクトのセットを使用してユーザーオブジェクトを作成することです。

すべてのユーザーと次のような情報を含むユーザーテーブルが欲しいのですが。

ユーザーテーブル:名、姓など。

次に、関係を管理するためのUser_Friendテーブル。何かのようなもの:

* User_Friendテーブル:id、userId、friendId(userId)*

ユーザーには多くの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_Friendのようなテーブルに保持したい場合、フレンドオブジェクトのマッピングはどのようになりますか?

友達を本質的にユーザーとして扱うべきですか?もしそうなら、上記のUser_FriendテーブルをUserテーブルに変更しますか?

編集:結合テーブルを使用した双方向の1対多/多対1を説明する休止状態の参照への このリンクを見つけました。
これにより、(友人用の)ユーザーテーブルを複製せずに、ユーザーと友人の関係を作成できますか?

ありがとう!

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

2つのテーブルを試してください:

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

ビジネスロジックは、関係が双方向か一方向かを示すことができます。

于 2012-12-13T05:05:39.377 に答える