0

我想用 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,这似乎是可能的,但我在这种关系中看不到任何自然顺序,我不想为这个技术问题定义一些人造的东西......

4

1 回答 1

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;
于 2013-06-30T13:12:37.663 回答