Creo que entendí mal el significado de la conexión en cascada en el contexto de una @ManyToOnerelación.
El caso:
public class User {
@OneToMany(fetch = FetchType.EAGER)
protected Set<Address> userAddresses;
}
public class Address {
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
protected User addressOwner;
}
¿Cuál es el significado de la cascade = CascadeType.ALL? Por ejemplo, si elimino una determinada dirección de la base de datos, ¿cómo afecta el hecho de que agregué la cascade = CascadeType.ALLinformación ( Usersupongo)?
fuente

Vea aquí un ejemplo de los documentos de OpenJPA.
CascadeType.ALLsignifica que hará todas las acciones.Citar:
Sebastian
fuente
Como he explicado en este artículo y en mi libro, de alto rendimiento de persistencia de Java , no se debe utilizar
CascadeType.ALLen el@ManyToOnepuesto transiciones de estado de la entidad debe propagarse de entidades matrices de los Niños, y no al revés.El
@ManyToOnelado siempre es la asociación Child, ya que asigna la columna de clave externa subyacente.Por lo tanto, debe mover el
CascadeType.ALLde la@ManyToOneasociación al@OneToManylado, que también debe utilizar elmappedByatributo ya que es la relación de tabla de asignación más eficiente de uno a muchos .fuente
De la especificación EJB3.0 :
En pocas palabras, las relaciones de entidad definidas con
CascadeType.Allgarantizarán que todos los eventos de persistencia tales como persistir, actualizar, fusionar y eliminar que ocurran en el padre, se pasen al hijo. La definición de otrasCascadeTypeopciones proporciona al desarrollador un nivel de control más granular sobre cómo la asociación de entidades maneja la persistencia.Por ejemplo, si tuviera un libro de objetos que contuviera una lista de páginas y agregue un objeto de página dentro de esta lista. Si la
@OneToManyanotación que define la asociación entre Libro y Página está marcada comoCascadeType.All, persistir en el Libro daría como resultado que la Página también se mantenga en la base de datos.fuente
En JPA 2.0, si desea eliminar una dirección si la eliminó de una entidad de usuario, puede agregarla
orphanRemoval=true(en lugar deCascadeType.REMOVE) a su@OneToMany.Más explicación entre
orphanRemoval=trueyCascadeType.REMOVEestá aquí .fuente
Si solo desea eliminar la dirección asignada al usuario y no afectar a la clase de entidad Usuario, debe intentar algo como eso:
De esta manera, no necesita preocuparse por usar fetch en las anotaciones. Pero recuerde que al eliminar el usuario, también eliminará la dirección conectada al objeto de usuario.
fuente