Tengo dos clases de entidad 'Usuario' y 'Documento'. Cada usuario tiene una bandeja de entrada y una bandeja de salida que son, de hecho, dos listas y cada documento puede residir en múltiples bandeja de entrada y bandeja de salida de los usuarios. Aquí están mis clases:JPA: ¿Múltiples relaciones muchas-a-muchas entre dos entidades?
@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>();
}
Cuando ejecuto el Programm y tratar de asignar un documento a la bandeja de entrada de un usuario (y viceversa), me sale el siguiente error:
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 (?, ?)")
La asociación generada la tabla se ve así:
DOCUMENT_USER
useroutbox_ID | outbox_ID |userinbox_ID | inbox_ID
¿Cómo puedo asignar valores predeterminados para una relación de tantos a muchos? ¿Sería mejor hacer dos tablas de asociación -> una para la relación de la bandeja de entrada, otra para la relación de la bandeja de salida? ¿Cómo podría lograr eso? Otras soluciones a este problema?
Cualquier ayuda muy apreciada, ¡muchas gracias de antemano!
intente poner @ManyToMany (cascade = CascadeType.ALL) en su método getter no en su campo. –
@tech_learner poner anotaciones en los campos está bien, ese no es el problema. –