update saveorupdate example java hibernate

java - saveorupdate - jpa update entity



Diferencia entre los métodos save y saveOrUpdate hibernate (4)

Así que simplemente actualice el registro existente, pero según mi conocimiento, debería crear un nuevo registro: Sí, debería crear un nuevo registro. Pero este comportamiento es solo para objetos transitorios, no para objetos persistentes.

En el momento en que carga el objeto llamando a load, este objeto se asocia con la sesión (estado persistente). Y debido a la comprobación sucia, este objeto se habría actualizado durante la descarga.

Pero, si este objeto fuera un objeto nuevo, en realidad habría marcado la diferencia en la llamada a la api de save () o saveoOrUpdate ().

Esta pregunta ya tiene una respuesta aquí:

Normalmente, había leído que el método save () genera un nuevo identificador para el objeto y solo activa INSERT y lo guarda, no lo actualiza, mientras que el método saveOrUpdate () puede INSERT o UPDATE .

Pero según mi experiencia, aquí puedo explicarlo mejor mediante un código de muestra,

Supongamos que hay Clase A , y encuentro el registro de la Tabla A por

A a = getHibernateTemplate.findById(7);

Así que ahora tengo un objeto persistente,

Y ahora estoy tratando de guardar el registro con el método de guardar simplemente modificando algunos de los campos,

Ahora estoy disparando,

getHibernateTemplate.save(a);

Así que solo actualiza el registro existente , pero según mi conocimiento , debería crear un nuevo registro .

Puedo estar equivocado acerca de las cosas certian, ¿alguien puede aclarar esto?


La diferencia importante entre los métodos de clase org.hibernate.Session, save & saveOrUpdate es, save genera un nuevo identificador y da como resultado una consulta INSERT, mientras que saveOrUpdate hace un INSERT o un UPDATE.

salvar

El método de guardar almacena un objeto en la base de datos. Eso significa que inserta una entrada si el identificador no existe, de lo contrario arrojará un error. Si la clave principal ya está presente en la tabla, no se puede insertar.

saveOrUpdate

Este método llama a save () o update () según la operación. Si el identificador existe, llamará al método de actualización, de lo contrario se llamará al método de guardar. El método saveOrUpdate () hace lo siguiente:

Si el objeto ya es persistente en la sesión actual, no hace nada. Si otro objeto asociado con la sesión tiene el mismo identificador, lance una excepción al llamante. Si el objeto no tiene propiedad de identificador, guarde () el objeto. Si el identificador del objeto tiene el valor asignado a un objeto recién instanciado, guardar () el objeto

Lea más desde here .


Se supone que save() toma una instancia transitoria como argumento, y no una instancia persistente. El javadoc no es muy exhaustivo, pero AFAIK, llamar a save() en una instancia persistente no tiene ningún efecto, aparte de la operación en cascada a las instancias transitorias vinculadas a la entidad, si se configura dicha cascada.

Tenga en cuenta que generalmente no hay razón para llamar a save() o saveOrUpdate() en una entidad adjunta y persistente, ya que Hibernate ensucia las entidades y hace que los cambios persistan automáticamente.


salvar

El method guardar almacena un object en la base de datos. Persistirá la instancia transitoria dada, asignando primero un identificador generado. returns el id de la entidad creada.

Mientras,

SaveOrUpdate ()

Las llamadas a save() o update() sobre la base del identificador existen o no. por ejemplo, si existe un identificador, se llamará a update() o si no se llamará a save() .

Hay muchos más como persist (), merge (), saveOrUpdateCopy () . Casi todos son iguales dando una funcionalidad y usabilidad ligeramente diferente.

Para más, puedes leer esto. ¿Cuáles son las diferencias entre los diferentes métodos de ahorro en Hibernate?