Hibernate中具有附加列的自引用实体
我想用Hibernate映射这些表:Hibernate中具有附加列的自引用实体,hibernate,attributes,many-to-many,self-reference,self-referencing-table,Hibernate,Attributes,Many To Many,Self Reference,Self Referencing Table,我想用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
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;
@ManyToMany Set<Friendship> friendships;
因为这样我就无法重定向用户的友谊,因为我无法添加类似的内容
@OneToMany Set<Friendship> friendships;
@OneToMany建立友谊;
因为我无法指定mappedBy=?参数,因此该关系将映射到另一个表中
但我想保持双向性
这个问题有什么好的解决办法吗
此外,用户在友谊表中的顺序并不重要,因此(user1,user2)=(user2,user1)。我认为这最好用一个idClass/EmbeddedId和一个等价的equals()实现来表示,对吗
编辑:
如果你在两个元素上定义了一些顺序,比如fromto,ownerowned,那么这似乎是可能的,但我看不到这种关系中有任何自然顺序,我不想仅仅为了这个技术问题定义一些人为的东西…用户实体
@ManyToMany Set<Friendship> friendships;
@ManyToMany Set<Friendship> friendships;
或者,如果希望友谊实体具有主键(user1、user2),则该实体必须拆分为2个表,如下所示:
FriendFK fKey;
Date firstMeeting;
表fk:
User member;
User memberFriend;
这将导致3个表:1)友谊2)用户3)友谊用户(见问题)此外,你不需要创建额外的实体来创建复合pk。还有其他方法可以实现这一点(IdClass或EmbeddedId)。
User member;
User memberFriend;