簡體   English   中英

JPA-使用中間表在同一張表之間映射OneToMany關聯

[英]JPA - Mapping OneToMany association between the same table using an intermediate table

我正在創建一個應用程序,其中一個很大的方面是用戶與朋友共享內容的能力。 我試圖在對象模型中表示這一點,但在使關聯正常工作方面遇到困難。 我使用的映射表記錄了Friender和Friendee,兩者均由用戶的主鍵(id)表示。 一個用戶可以有很多朋友,也可以被其他用戶引用。 架構如下所示:

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的外鍵具有錯誤的列數。 應該是2

我嘗試了很多其他配置,包括向每個@JoinColumn添加“ referencedColumnName”屬性,但是它們也產生了錯誤。 我也不完全確定當前擁有的架構是否是將用戶映射到一起的最佳方法。

感謝您的幫助!

刪除AbstractPersistable的擴展名解決了該問題-包含一個@Id引用,並與我放入User內部的@Id引用發生沖突。

暫無
暫無

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

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