Tôi có hai lớp thực thể 'Người dùng' và 'Tài liệu'. Mỗi người dùng có một hộp thư đến và hộp thư đi thực tế là hai Danh sách và mỗi Tài liệu có thể nằm trong nhiều hộp thư đến và hộp thư của người dùng. Dưới đây là lớp học của tôi:JPA: Quan hệ nhiều-nhiều giữa hai thực thể?
@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>();
}
Khi tôi chạy programm và cố gắng gán một tài liệu đến hộp thư của người dùng (và ngược lại), tôi nhận được lỗi sau:
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 (?, ?)")
Hiệp hội tạo bảng trông như thế này:
DOCUMENT_USER
useroutbox_ID | outbox_ID |userinbox_ID | inbox_ID
Làm cách nào để gán giá trị mặc định cho mối quan hệ nhiều-nhiều? Nó sẽ được tốt hơn để làm cho hai bảng hiệp hội -> một cho quan hệ hộp thư đến, một cho mối quan hệ outbox? Làm thế nào tôi sẽ đạt được điều đó? Các giải pháp khác cho vấn đề này?
Bất kỳ trợ giúp nào được đánh giá cao - cảm ơn rất nhiều trước!
thử đặt @ManyToMany (cascade = CascadeType.ALL) trên phương thức getter của nó chứ không phải trường của nó. –
@tech_learner đặt chú thích trong các trường là ổn, đó không phải là vấn đề. –