hibernate - persistencia - tutorial de jpa
ConfusiĆ³n entre JPA e Hibernate en cascada (2)
Estoy usando Hibernate 3.6 y tengo mi código anotado (contra el uso de archivos de mapeo hibernate). Me encontré con el conocido "problema" de utilizar las opciones de cascada de JPA que no son compatibles con CascadeType de Hibernate (consulte este enlace para obtener más información http://www.mkyong.com/hibernate/cascade-jpa-hibernate-annotation-common-mistake / ).
Esperaba obtener un poco más de aclaración sobre el problema. Tengo algunas preguntas particulares:
1) Entonces @Cascade ({CascadeType.SAVE_UPDATE}) funciona para saveOrUpdate (), pero ¿se aplica también si utilizo merge () o persist ()? o tengo que usar los tres Hibernate CascadeTypes?
2) ¿Cómo decido si usar las opciones de cascada JPA o la anotación Hibernate @Cascade en su lugar?
2) Hay un "error" presentado contra esto en Hibernate, pero los desarrolladores aparentemente ven esto como un problema de documentación (estoy completamente en desacuerdo con ellos), y no veo que haya sido abordado en dicha documentación. ¿Alguien sabe por qué esto está "funcionando como se diseñó" y no es un error en la implementación de JPA de Hibernate?
Muchas gracias de antemano.
De la documentación de referencia de Hibernate
Para cada operación básica de la sesión de Hibernate, incluyendo persist (), merge (), saveOrUpdate (), delete (), lock (), refresh (), evict (), replicate () - Hay un estilo de cascada correspondiente
Si ve la documentación de CascadeType , verá cada estilo de cascada para cada operación de sesión
¿Cómo decido si utilizar las opciones de cascada JPA o la anotación Hibernate @Cascade en su lugar?
Prefiere usar el estilo de cascada JPA simple cuando se utiliza una aplicación JPA simple. Si usa Hibernate, prefiera el estilo Hibernate en cascada
Este comportamiento está documentado en 11.11. Persistencia transitiva
Los tipos de cascada de Hibernate corresponden a las operaciones individuales, por lo que necesita las tres.
En la mayoría de los casos, necesita
CascadeType.ALL
o no tiene cascada. En ese caso, la anotación JPA es suficiente, ya queCascadeType.ALL
de JPACascadeType.ALL
cubre todas las operaciones de Hibernate. De lo contrario, si necesita control en cascada de granularidad (y utiliza la interfaz deSession
de Hibernate), necesita@Cascade
de Hibernate.No es un error en la implementación de JPA, porque si utiliza el
EntityManager
de JPA todo funciona bien. Este problema existe solo si combina anotaciones JPA con la interfaz deSession
de Hibernate.