usar tutorial persistencia implementar curso como hibernate jpa cascade

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

  1. Los tipos de cascada de Hibernate corresponden a las operaciones individuales, por lo que necesita las tres.

  2. En la mayoría de los casos, necesita CascadeType.ALL o no tiene cascada. En ese caso, la anotación JPA es suficiente, ya que CascadeType.ALL de JPA CascadeType.ALL cubre todas las operaciones de Hibernate. De lo contrario, si necesita control en cascada de granularidad (y utiliza la interfaz de Session de Hibernate), necesita @Cascade de Hibernate.

  3. 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 de Session de Hibernate.