Posterior a buscar en diferentes repositorios y páginas webs de internet al terminar hemos hallado la respuesta que te mostraremos aquí.
Solución:
El significado de CascadeType.ALL
es que la persistencia se propagará (cascada) todo EntityManager
operaciones (PERSIST, REMOVE, REFRESH, MERGE, DETACH
) a las entidades relacionadas.
En tu caso me parece una mala idea, ya que quitar un Address
llevaría a eliminar los relacionados User
. Como un usuario puede tener varias direcciones, las otras direcciones quedarían huérfanas. Sin embargo, el caso inverso (anotando el User
) tendría sentido: si una dirección pertenece a un solo usuario, es seguro propagar la eliminación de todas las direcciones que pertenecen a un usuario si se elimina este usuario.
Por cierto: es posible que desee agregar un mappedBy="addressOwner"
attribute para usted User
para señalar al proveedor de persistencia que la columna de unión debe estar en la tabla DIRECCIÓN.
Vea aquí un ejemplo de los documentos de OpenJPA. CascadeType.ALL
significa que hará todas las acciones.
Cotizar:
CascadeType.PERSIST: al persistir una entidad, también persisten las entidades contenidas en sus campos. Sugerimos una aplicación generosa de esta regla en cascada, porque si EntityManager encuentra un campo que hace referencia a una nueva entidad durante el vaciado y el campo no usa CascadeType.PERSIST, es un error.
CascadeType.REMOVE: al eliminar una entidad, también elimina las entidades contenidas en este campo.
CascadeType.REFRESH: al actualizar una entidad, actualice también las entidades contenidas en este campo.
CascadeType.MERGE: al fusionar el estado de la entidad, fusione también las entidades contenidas en este campo.
Sebastián
no deberías usar CascadeType.ALL
en @ManyToOne
ya que las transiciones de estado de entidad deben propagarse de las entidades principales a las secundarias, no al revés.
los @ManyToOne
side siempre es la asociación secundaria, ya que asigna la columna de clave externa subyacente.
Por lo tanto, debe mover el CascadeType.ALL
desde el @ManyToOne
asociación a la @OneToMany
lado, que también debe utilizar el mappedBy
attribute ya que es el mapeo de relación de tabla de uno a muchos más eficiente.