Ho due classi di entità 'Utente' e 'Documento'. Ogni utente ha una casella di posta in arrivo e una casella di posta in uscita che sono in realtà due elenchi e ciascun documento può risiedere in più caselle di posta in arrivo e in uscita di utenti. Qui ci sono le mie classi:JPA: più relazioni molti-a-molti tra due entità?
@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>();
}
Quando eseguo il programma e cercare di assegnare un documento alla casella di posta di un utente (e viceversa), ottengo il seguente errore:
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 (?, ?)")
L'associazione generata tabella è simile a questa:
DOCUMENT_USER
useroutbox_ID | outbox_ID |userinbox_ID | inbox_ID
Come si assegnano i valori predefiniti per una tale relazione molti-a-molti? Sarebbe meglio creare due tabelle di associazione -> una per la relazione inbox, un'altra per la relazione outbox? Come potrei realizzarlo? Altre soluzioni a questo problema?
Qualsiasi aiuto molto apprezzato - molte grazie in anticipo!
provare a mettere @ManyToMany (cascade = CascadeType.ALL) sul suo metodo getter non sul suo campo. –
@tech_learner che inserisce annotazioni nei campi va bene, non è questo il problema. –