簡體   English   中英

Hibernate中具有附加列的自引用實體

[英]Self referencing Entity in Hibernate with additional Columns

我想用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個實體和ManyToMany關系映射表中的1個)。 問題是我不能將其映射為2次

@ManyToOne User user1/2;

因為那樣我將無法重定向用戶的友誼,因為我無法添加類似

@OneToMany Set<Friendship> friendships; 

給用戶,因為我將無法指定mappedBy =? 參數,因此該關系將被映射到另一個表中。

但是我想保持雙向。

有什么好辦法解決這個問題嗎?

此外,友誼表中用戶的排序方式無關緊要,因此(user1,user2)=(user2,user1)。 我認為最好用等價的equals()-Implementation表示在idClass / EmbeddedId中,對嗎?

編輯:如果您在2個元素上定義了一些順序,例如from <->至,owner <->擁有,似乎可以對此進行歸檔,但是我看不到這種關系中的任何自然順序,並且我不願意為這個技術問題定義一些人造的東西...

用戶實體

@ManyToMany Set<Friendship> friendships;

然后是友誼表:

User member;
User memberFriend;
Date firstMeeting;

或者,如果您想使用PRIMARY KEY(user1,user2)作為友誼實體,則必須將實體拆分為2個表,例如:

FriendFK fKey;
Date firstMeeting;

和表FriendFK:

User member;
User memberFriend;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM