¿Qué hace realmente CascadeType.REFRESH?

81

¿Qué hace CascadeType.REFRESHrealmente?

La definición de esto es

Cuando actualizamos una entidad, todas las entidades contenidas en este campo también se actualizan

¿Pero qué significa esto en la práctica? ¿Podría alguien darme un ejemplo sencillo?

Kim L
fuente

Respuestas:

117

Las descripciones individuales de CascadeType pueden ser un poco confusas, pero hay una manera fácil de averiguarlo a partir del caso general.

Para cualquiera de los CascadeTypevalores, significa que si Xse llama a la operación en una instancia usando la EntityManagerinterfaz, y esa instancia tiene referencias a otras instancias de entidad, y esa asociación se ha CascadeType.Xdefinido, entonces la EntityManageroperación también se aplicará a esa entidad asociada.

Entonces EntityManager.refresh()se define como:

Actualice el estado de la instancia desde la base de datos, sobrescribiendo los cambios realizados en la entidad, si los hubiera.

Entonces, si la entidad A tiene una referencia a la entidad B, y esa referencia está anotada @CascadeType.REFRESHy EntityManager.refresh(A)se llama, entonces EntityManager.refresh(B)también se llama implícitamente.

skaffman
fuente
Sé que esta es una publicación antigua, pero usando su ejemplo de A y B anterior, si la instancia de B está actualmente separada, ¿un CascadeType.PERSIST haría que B se volviera persistente? Estoy usando la implementación JPA de Hibernate.
Andy
4
Respondí mi propia pregunta. La respuesta es no. Debe llamar a guardar en el objeto para que sea persistente.
Andy
¿Qué pasará si fusiono un objeto que está en estado persistente?
abhijeet pathak
9

Recuperación por actualización: los objetos administrados se pueden volver a cargar desde la base de datos mediante el método de actualización:

El contenido del objeto gestionado en la memoria se descarta (incluidos los cambios, si los hubiera) y se reemplaza por datos que se recuperan de la base de datos. Esto podría ser útil para garantizar que la aplicación maneje la versión más actualizada de un objeto de entidad, en caso de que otro EntityManager lo haya cambiado desde que se recuperó.

Fuente: http://www.objectdb.com/java/jpa/persistence/retrieve

Carácter distintivo
fuente