0

これらのテーブルを Hibernate でマップしたい:

CREATE TABLE user
(
    id VARCHAR(20), 
    //some stuff    
    PRIMARY KEY(id)


);

CREATE TABLE friendship
(
    user1 VARCHAR(20),
    user2 VARCHAR(20),
    firstMeeting TIMESTAMP,
    //mb some additional stuff
    PRIMARY KEY(user1, user2),
    FOREIGN KEY(user1) REFERENCES user(id),
    FOREIGN KEY(user2) REFERENCES user(id)
);

これをマッピングする正しい方法について疑問に思います。私はこれについて考えました:

を持つユーザーエンティティ

@ManyToMany Set<Friendship> friendships;

との友好団体

@Size(min=2, max=2)
@ManyToMany Set<User> members;

Date firstMeeting;

しかし、これが上記のスキーマと一致するとは思いません (列名だけでなく、tbl カウントでも、スキーマには 2 が必要ですが、これには 3 つのテーブルが必要で、2 つのエンティティと、ManyToMany 関係マッピング テーブル用に 1 つ必要です)。問題は、これを2回としてマッピングできないことです

@ManyToOne User user1/2;

ユーザーからの友情をリダイレクトできないため、次のようなものを追加できないため

@OneToMany Set<Friendship> friendships; 

MappedBy=? を指定できないため、ユーザーに 引数なので、関係は追加のテーブルにマップされます...

しかし、私はそれを双方向に保ちたいです。

この問題の良い解決策はありますか?

また、ユーザーがフレンドシップ テーブルでどのように順序付けられているかは問題ではないため、(user1, user2) = (user2, user1) となります。これは、同等の equals()-Implementation を使用して idClass/EmbeddedId で表現するのが最適だと思いますよね?

編集: from<->to、owner<->owned のように 2 つの要素に対して何らかの順序を定義すると、これをアーカイブすることは可能であるように思われますが、この関係に自然な順序は見られず、したくありません。この技術的な問題のためだけにいくつかの人為的なものを定義します...

4

1 に答える 1

0

を持つユーザーエンティティ

@ManyToMany Set<Friendship> friendships;

そして友情表:

User member;
User memberFriend;
Date firstMeeting;

または、プライマリ キー (user1、user2) を持つフレンドシップ エンティティが必要な場合は、エンティティを次のように 2 つのテーブルに分割する必要があります。

FriendFK fKey;
Date firstMeeting;

およびテーブル FriendFK :

User member;
User memberFriend;
于 2013-06-30T13:12:37.663 に答える