我想这些表与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