Fusión y actualización de entidades de Hibernación

En el tutorial anterior, aprendimos sobre guardar entidades utilizando métodos save() o saveOrUpdate() en hibernación. Allí aprendimos que en la mayoría de los casos, ni siquiera necesitará esos métodos, ya que hibernate administra automáticamente las actualizaciones en entidades persistentes. Solo necesita preocuparse por los objetos transitorios en la mayoría de los casos. En este tutorial, estoy discutiendo algunos pensamientos sobre los métodos refresh() y merge() presentes en la clase de sesión de hibernación.

Actualizar Entidades de Hibernación Usando el método refresh ()

A veces nos enfrentamos a una situación en la que la base de datos de la aplicación se modifica con alguna aplicación/agente externo y, por lo tanto, la entidad de hibernación correspondiente en su aplicación realmente no está sincronizada con su representación de la base de datos, es decir, tiene datos antiguos. En este caso, puede usar el método session.refresh() para volver a rellenar la entidad con los últimos datos disponibles en la base de datos.

Puede usar uno de los métodos refresh() en la interfaz de sesión para actualizar una instancia de un objeto persistente, de la siguiente manera:

public void refresh(Object object) throws HibernateExceptionpublic void refresh(Object object, LockMode lockMode) throws HibernateException

Estos métodos recargarán las propiedades del objeto desde la base de datos, sobrescribiéndolas. En aplicaciones de la vida real, no tiene que usar el método refresh() muy a menudo, aparte del escenario indicado anteriormente.

Veamos un ejemplo del método refresh ().

Mire por encima de las líneas resaltadas.

  • Línea 15 guarde al empleado con el nombre » Lokesh «
  • Línea 26 establezca el nombre»Vikas». A medida que la entidad está separada, la base de datos no se actualizará.
  • Línea 27 actualice la entidad con base de datos utilizando el método refresh().
  • Línea 32 verifique que el nombre establecido en la entidad se haya actualizado con «Lokesh», ya que es lo que la base de datos tiene en este momento.

Esto fue todo sobre el método de actualización. Veamos otro método similar merge().

Fusionar Entidades Hibernadas Usando el Método merge ()

El método merge() hace exactamente lo contrario a lo que hace refresh(), es decir, actualiza la base de datos con valores de una entidad separada. El método de actualización era actualizar la entidad con la información más reciente de la base de datos. Así que, básicamente, ambos son exactamente opuestos.

La fusión se realiza cuando se desea que una entidad separada vuelva a cambiar a estado persistente, con los cambios de la entidad separada migrados a (o reemplazados) la base de datos. Las firmas de método para las operaciones de fusión son:

Object merge(Object object)Object merge(String entityName, Object object)

La documentación oficial de Hibernación da una muy buena explicación del método merge():

Copie el estado del objeto dado en el objeto persistente con el mismo identificador. Si no hay ninguna instancia persistente asociada actualmente a la sesión, se cargará. Devuelve la instancia persistente. Si la instancia dada no está guardada, guarde una copia y devuélvala como una instancia persistente nueva. La instancia dada no se asocia con la sesión. Esta operación se conecta en cascada a instancias asociadas si la asociación se asigna con cascade=»merge».

Así que si tomo el siguiente código, por ejemplo, los puntos enumerados a continuación deben ser claros para usted.

EmployeeEntity mergedEmpEntity = session.merge(empEntity);
  • ‘empEntity’ es una entidad separada cuando se pasa al método merge ().
  • el método merge () buscará una instancia de EmployeeEntity ya cargada con información de identificador tomada de empEntity. Si se encuentra dicha entidad persistente, se utilizará para las actualizaciones. De otro modo, una nueva entidad de empleo se carga en la sesión utilizando la misma información de identificador que la presente en ‘empEntity’.
  • Los datos se copian de ‘empEntity’ a la nueva entidad encontrada / cargada.
  • Debido a que la entidad nueva/encontrada es persistente, todos los datos copiados de ‘empEntity’ se guardan automáticamente en la base de datos.
  • La referencia de esa nueva entidad se devuelve desde el método merge () y se asigna a la variable ‘mergedEmpEntity’.
  • ‘empEntity’ sigue siendo una entidad separada.

En el ejemplo anterior, ‘mergedPersistentEmpEntity’ es una entidad nueva que es persistente. Por lo tanto, si desea realizar más cambios, haga clic en la instancia ‘mergedPersistentEmpEntity’.

Eso es todo para este tutorial que cubre los métodos merge() y refresh() en hibernación. Recuerde que la pregunta se puede hacer como diferencia entre merge() y refresh(), o diferencia entre merge() y load(), etc. Esté preparado para encontrar cualquier diferencia entre las preguntas de la entrevista.

Feliz Aprendizaje !!

¿Fue útil este post?

Háganos saber si le gustó la publicación. Es la única manera de mejorar.
No

En el tutorial anterior, aprendimos sobre guardar entidades utilizando métodos save() o saveOrUpdate() en hibernación. Allí aprendimos que en la mayoría de los casos, ni siquiera necesitará esos métodos, ya que hibernate administra automáticamente las actualizaciones en entidades persistentes. Solo necesita preocuparse por los objetos transitorios en la mayoría de los casos. En este tutorial,…

En el tutorial anterior, aprendimos sobre guardar entidades utilizando métodos save() o saveOrUpdate() en hibernación. Allí aprendimos que en la mayoría de los casos, ni siquiera necesitará esos métodos, ya que hibernate administra automáticamente las actualizaciones en entidades persistentes. Solo necesita preocuparse por los objetos transitorios en la mayoría de los casos. En este tutorial,…

Deja una respuesta

Tu dirección de correo electrónico no será publicada.