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