Hibernate: actualizar, desalojar, replicar y enjuagar

Desearía saber qué es exactamente lo que hace cada elemento de esta lista, cómo funciona, cuáles son las consecuencias y cuándo es el momento adecuado para usarlo.

  1. Refrescar
  2. Desalojar
  3. Reproducir exactamente
  4. Enjuagar

Incluso me pregunto qué hace cada uno, pero no estoy del todo seguro, así que le pido su ayuda, porque realmente quiero entenderlo.

Sé que es una pregunta bastante genérica, pero creo que es muy útil saberlo todo.

Gracias.

La documentación de Hibernate ofrece buenos ejemplos de esto. Además, esta publicación del blog le dará una idea. Agregaré alguna línea a partir de ahí abajo.

Es posible volver a cargar un objeto y todas sus colecciones en cualquier momento, utilizando el método refresh() . Esto es útil cuando los desencadenadores de base de datos se utilizan para inicializar algunas de las propiedades del objeto.

 sess.save(cat); sess.flush(); //force the SQL INSERT sess.refresh(cat); //re-read the state (after the trigger executes) 

mira aquí para más ejemplos.

Siempre que pase un objeto para save(), update() or saveOrUpdate() , y siempre que recupere un objeto usando load(), get(), list(), iterate() or scroll() , ese objeto se agrega a la memoria caché interna de la sesión.

Cuando se llame posteriormente a flush() , el estado de ese objeto se sincronizará con la base de datos. Si no desea que se produzca esta sincronización, o si está procesando una gran cantidad de objetos y necesita administrar la memoria de manera eficiente, el método evict() puede usarse para eliminar el objeto y sus colecciones del caché de primer nivel.

 ScrollableResult cats = sess.createQuery("from Cat as cat").scroll(); //a huge result set while ( cats.next() ) { Cat cat = (Cat) cats.get(0); doSomethingWithACat(cat); sess.evict(cat); // (if gives the compile time error then use it: sess.evict(cat.getClass()); } 

Lee el ejemplo completo de aquí .

Lea sobre la sesión API aquí .

replicate() está destinado a ser utilizado en lugar de save() / persist() cuando necesita guardar una entidad con un identificador dado a pesar del hecho de que el identificador de dicha entidad está configurado para ser generado.

Es útil cuando algunas de las entidades (tal vez provenientes de sistemas externos) tienen identificadores preexistentes, mientras que otras entidades del mismo tipo necesitan que se generen sus identificadores.

Sin embargo, debido a un error de larga data en Hibernate ( HHH-1459 , HHH-2716 ) replicate() no funciona como se esperaba con algunos tipos de generadores de id. Este problema limita la utilidad de replicate() y requiere que implemente soluciones desagradables para emular su comportamiento si la estrategia del generador de su identificador se ve afectada y no puede cambiarla.

  • session.flush() descarga de la sesión obliga a Hibernate a sincronizar el estado en memoria de la sesión con la base de datos.
  • session.evict() Separe el objeto de la memoria caché de la sesión. Después de separar el objeto de la sesión, no se conservará ningún cambio en el objeto.
  • session.refresh() Recarga todos los datos.
  • session.replicate() datos se replican en diferentes Datastore en diferentes modos.