我有兩個實體類'用戶'和'文檔'。每個用戶都有一個收件箱和一個發件箱,實際上它們是兩個列表,每個文檔可以駐留在多個收件箱和發件箱的用戶中。這裏是我的課:JPA:兩個實體之間有多個多對多的關係?
@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>();
}
當我運行PROGRAMM並嘗試將文檔分配給用戶的收件箱(反之亦然),我收到以下錯誤:
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
我該如何爲這種多對多關係分配默認值?製作兩個關聯表是否會更好 - >一個用於收件箱關係,另一個用於發件箱關係?我將如何實現這一目標?解決這個問題的其他方法?
任何幫助高度讚賞 - 非常感謝提前!
嘗試將@ManyToMany(cascade = CascadeType.ALL)放在其getter方法而不是其字段上。 – 2012-04-06 12:44:38
@tech_learner在域中添加註釋是沒問題的,這不是問題。 – 2012-04-06 12:49:05