¿Qué significan REFRESH y MERGE en términos de bases de datos?

94

Tengo curiosidad y necesito encontrar esta respuesta rápidamente. Google no ayudará mucho.

La API de persistencia de Java tiene estas propiedades que le indican al marco que realice operaciones en cascada en entidades asociadas:

CascadeType.PERSIST
CascadeType.DELETE
CascadeType.MERGE
CascadeType.REFRESH

Sé lo que significan los dos primeros: cuando persisto el objeto A que tiene B, persisto B también, y cuando elimino A, elimino B también.

Pero no puedo entender lo que logran los otros dos. ¿Ayuda?

André Chalella
fuente

Respuestas:

80

REFRESH significa "extraer cualquier cambio de estado de la base de datos a mi representación". Hacer esto en cascada es simple; significa que se actualizan todas las entidades asociadas.

FUSIÓN significa algo complejo que se aproxima a "guardar" pero es más como "empujar esta entidad separada de nuevo al estado administrado y guardar sus cambios de estado"; la cascada significa que todas las entidades asociadas se retroceden de la misma manera, y el identificador de entidad administrada del que regresa .merge()tiene todas las entidades administradas asociadas.

Enlace a una instancia de los documentos relevantes

caos
fuente
1
¿Cuál es el valor predeterminado (si no configuramos ningún CascadeType) y cuál es el más sensato / común de configurar?
Rosdi Kasim
@Rosdi Kasim: el valor CascadeTypepredeterminado es una matriz vacía.
user1438038
@chaos so refresh actualiza a los niños para que coincidan con lo que hay en la base de datos cuando el padre se actualiza / actualiza. Merge esencialmente sobrescribirá los campos actualizados en los elementos secundarios de la base de datos para reflejar las entidades secundarias con el elemento primario. Entonces, si se usan ambos, ¿qué sucede? Imagino que he entendido mal esto.
Jordan Mackie
87

Significado de la anotación JPA para relaciones de muchos a muchos :

  • TODOS: todas las posibles operaciones en cascada realizadas en la entidad de origen se conectan en cascada al destino de la asociación.
  • FUSIÓN: si se fusiona la entidad de origen, la fusión se conecta en cascada al destino de la asociación.
  • PERSIST: si la entidad de origen persiste, la persistencia se conecta en cascada al destino de la asociación.
  • REFRESH: si se actualiza la entidad de origen, la actualización se conecta en cascada al destino de la asociación.
  • ELIMINAR: si se elimina la entidad de origen, también se elimina el destino de la asociación.

Yo mismo los veo de esta manera (más legibles):

  • FUSIONAR: para objetos existentes, fusionar los datos existentes en la tabla con los datos de mi objeto. (sincronizar con la base de datos)
  • PERSIST: es crear nuevos registros a partir de un objeto en la base de datos.
  • ACTUALIZAR: sirve para actualizar los datos del objeto. Quizás hubo un cambio en la base de datos que necesita sincronizarse. (sincronizar desde la base de datos)
  • REMOVE - es, bueno, eliminar.
cgp
fuente
1
El Javadoc para las anotaciones no me aclaró nada. ¡Gracias por la respuesta!
André Chalella