我想這些表與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;
友誼entitiy與
@Size(min=2, max=2)
@ManyToMany Set<User> members;
Date firstMeeting;
,但我不覺得這上面(不僅在列名,但在TBL計數的模式匹配,模式需要2個,但是這需要3個映射表,2個實體和1個ManyToMany關係映射表)。 的problm是我不能映射此爲2倍
@ManyToOne User user1/2;
因爲那時我將無法到友誼從用戶重定向,因爲我不能像
@OneToMany Set<Friendship> friendships;
添加一些用戶,因爲我不會是能夠指定mappedBy =?論點,所以這種關係將被映射到一個附加表中...
但是我想保持雙向。
這個問題的任何好的解決方案?
除此之外,用戶在友誼表中的排序並不重要,所以(user1,user2)=(user2,user1)。我認爲這將是一個idClass/EmbeddedId與等效equals()的最佳表示 - 實現,對吧?
編輯: 這似乎是可能的archieve此,如果u超過2個元素定義一些命令,就像從< - >到,業主< - >所有,但我沒有看到與此相關的任何自然秩序和我不RLY要定義一些人爲的東西只是這個技術問題......
這將導致3個表: 1)友誼 2)用戶 3)friendship_user (查看問題) – scrimau
除了你不需要創建一個額外的實體來創建一個複合pk。還有其他方法可以實現這一點(IdClass或EmbeddedId)。 – scrimau