Ich habe zwei Entitätsklassen 'Benutzer' und 'Dokument'. Jeder Benutzer hat einen Posteingang und einen Postausgang, bei denen es sich tatsächlich um zwei Listen handelt, und jedes Dokument kann sich in mehreren Posteingängen und Postausgängen von Benutzern befinden. Hier sind meine Klassen:JPA: Mehrere Viele-zu-Viele-Beziehungen zwischen zwei Entitäten?
@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>();
}
Wenn ich das Programm laufen und versuchen, ein Dokument zu dem Posteingang eines Benutzers (und umgekehrt) zu vergeben, erhalte ich die folgende Fehlermeldung:
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 (?, ?)")
Der erzeugte Verband Tabelle sieht so aus:
DOCUMENT_USER
useroutbox_ID | outbox_ID |userinbox_ID | inbox_ID
Wie würde ich Standardwerte für eine solche Viele-zu-Viele-Beziehung zuweisen? Wäre es besser, zwei Zuordnungstabellen zu erstellen -> eine für die Inbox-Relation, eine andere für die Outbox-Relation? Wie würde ich das erreichen? Andere Lösungen für dieses Problem?
Jede Hilfe sehr geschätzt - vielen Dank im Voraus!
versuchen, die @ManyToMany (cascade = CascadeType.ALL) auf ihre Getter-Methode, nicht ihr Feld. –
@tech_learner Putting Annotations in Feldern ist in Ordnung, das ist nicht das Problem. –