簡體   English   中英

JPA:兩個實體之間存在多個多對多關系?

[英]JPA: Multiple many-to-many relations between two entities?

我有兩個實體類“用戶”和“文檔”。 每個用戶都有一個收件箱和一個發件箱,實際上是兩個List,每個Document可能駐留在多個用戶的收件箱和發件箱中。 這是我的課程:

@Entity
public class User {

    @Id
    private Long id;

    @ManyToMany(mappedBy = "userinbox", cascade=CascadeType.ALL)
    private List<Document> inbox = new ArrayList<Document>();
    @ManyToMany(mappedBy = "useroutbox", cascade=CascadeType.ALL)
    private List<Document> outbox = new ArrayList<Document>();

}

@Entity
public class Document {

    @Id
    private Long id;

    @ManyToMany(cascade=CascadeType.ALL)
    private List<User> userinbox  = new ArrayList<User>();
    @ManyToMany(cascade=CascadeType.ALL)
    private List<User> useroutbox  = new ArrayList<User>();

}

當我運行該程序並嘗試將文檔分配給用戶的收件箱(反之亦然)時,出現以下錯誤:

Error Code: 1364

Call: INSERT INTO DOCUMENT_USER (userinbox_ID, inbox_ID) VALUES (?, ?)
    bind => [2 parameters bound]

Internal Exception: java.sql.SQLException: Field 'useroutbox_ID' doesn't have a default value

Query: DataModifyQuery(name="userinbox" sql="INSERT INTO DOCUMENT_USER (userinbox_ID, inbox_ID) VALUES (?, ?)")

生成的關聯表如下所示:

DOCUMENT_USER
useroutbox_ID | outbox_ID |userinbox_ID | inbox_ID

我將如何為這種多對多關系分配默認值? 制作兩個關聯表會更好嗎 -> 一個用於收件箱關系,另一個用於發件箱關系? 我將如何做到這一點? 這個問題的其他解決方案?

非常感謝任何幫助 - 非常感謝!

我認為更好的選擇是有兩個單獨的表,每個關系一個。 因為您實際上在兩個不同實體之間有兩種關系,而不是與四個不同實體之間的一種關系。

因此,您應該為Document端的每個屬性添加一個@JoinTable注釋,因為在User端,這些關系被映射到一個屬性。 類似於以下內容:

@Entity
public class Document {

    @Id
    private Long id;

    @ManyToMany(cascade=CascadeType.ALL)
    @JoinTable(name = "document_inbox", joinColumns = @JoinColumn(name = "userinbox_id"),
               inverseJoinColumns = @JoinColumn(name = "inbox_id"))
    private List<User> userinbox  = new ArrayList<User>();
    @ManyToMany(cascade=CascadeType.ALL)
    @JoinTable(name = "document_outbox", joinColumns = @JoinColumn(name = "useroutbox_id"),
               inverseJoinColumns = @JoinColumn(name = "outbox_id"))
    private List<User> useroutbox  = new ArrayList<User>();

}

讓另一個實體保持原樣。 希望這可以幫助。

暫無
暫無

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

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