我想用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个实体和1个用于ManyToMany关系映射表)。 问题是我不能将其映射为2次
@ManyToOne User user1/2;
因为那时我无法重定向用户的友谊,因为我无法添加类似
的内容@OneToMany Set<Friendship> friendships;
到用户,因为我无法指定mappedBy =?参数,所以关系将映射到另一个表...
但我想保持双向。
这个问题有什么好的解决方案吗?
除了在友谊表中如何订购用户无关紧要外,所以(user1,user2)=(user2,user1)。我认为这最好用idClass / EmbeddedId表示,等效的是equals() - 实现,对吗?
编辑: 似乎有可能实现这一点,如果你在2个元素上定义一些顺序,比如从&lt; - &gt;到所有者&lt; - &gt;拥有,但我没有看到这种关系中的任何自然顺序,我不想要为这个技术问题定义一些人为的东西...
答案 0 :(得分:0)
用户实体
@ManyToMany Set<Friendship> friendships;
然后是友谊表:
User member;
User memberFriend;
Date firstMeeting;
或者如果您想要使用PRIMARY KEY(user1,user2)进行友谊授权,则必须将实体拆分为2个表格,如:
FriendFK fKey;
Date firstMeeting;
和表FriendFK:
User member;
User memberFriend;