Saltar al contenido

¿Cuál es el significado de CascadeType.ALL para una asociación @ManyToOne JPA?

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *