我想用 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)。我认为这最好用具有等效 equals() 实现的 idClass/EmbeddedId 来表达,对吧?
编辑:如果你在 2 个元素上定义了一些顺序,比如 from<->to,owner<->owned,这似乎是可能的,但我在这种关系中看不到任何自然顺序,我不想为这个技术问题定义一些人造的东西......