![](/img/trans.png)
[英]JPA: redundant sql insertions after using multiple many-to-many relations between three entities
[英]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.