2014-09-21 191 views
0

我正在創建一個應用程序,其中一個大方面是用戶與朋友共享內容的能力。我試圖在對象模型中表示這一點,並且無法使關聯正常工作。我正在使用一個映射表來記錄friender和friendee,這兩者都由用戶的主鍵(id)表示。用戶可以有很多朋友,也可以被其他用戶引用。這是該架構是什麼樣子:JPA - 使用中間表在同一張表之間映射OneToMany關聯

Users: 
int user_id (PK) 
varchar(32) email 
varchar(64) password 

Users_Map: 
int users_map_id (PK) 
int friendee_id (FK references users(user_id)) 
int friender_id (FK references users(user_id)) 

這就是我如何在用戶實體設置:

@Data 
@Entity 
@Table(name = "users") 
public class User extends AbstractPersistable<Long> { 

    @Id 
    @Column(name = "user_id") 
    private Long id; 

    @Column 
    private String email; 

    @Column 
    private String password; 

    @OneToMany 
    @JoinTable(name = "users_map", 
      joinColumns = { @JoinColumn(name = "friender_id") }, 
      inverseJoinColumns = { @JoinColumn(name = "friendee_id") }) 
    private List<User> friends; 
} 

我部署應用程序時遇到以下錯誤

org.hibernate.AnnotationException:外鍵引用 com.x.webapp.data.entity.User從 com.x.webapp.data.entity.User的錯誤編號爲 c olumn。應該是2

我已經嘗試了很多其他配置,包括爲每個@JoinColumn添加「referencedColumnName」屬性,但它們也產生了錯誤。我也不完全確定我現在擁有的模式是否是將用戶映射到一起的最佳方式。

我感謝任何幫助!

+2

只是一個說明:你描述的是一個ManyToMany,而不是OneToMany。 – 2014-09-21 17:29:04

+0

「friends_map」表的定義在哪裏?如果你的意思是「users_map」那麼爲什麼有一列不是關係的一部分的「users_map_id」? – 2014-09-21 17:29:38

+0

糟糕,什麼是錯字 - 它是users_map。 「不是關係的一部分」是什麼意思?它對用戶之間的映射沒有意義 - 是否應該被替換/刪除?將關係更改爲ManyToMany時,我也會遇到同樣的錯誤。 – Swamp56 2014-09-21 17:40:57

回答

0

刪除AbstractPersistable的擴展可以解決這個問題 - 它包含一個@Id引用,並與我放入User的@Id引用發生衝突。