Saltar al contenido

¿Cuáles son las diferencias entre los diferentes métodos de guardado en Hibernate?

Aurora, parte de nuestro staff, nos hizo el favor de crear este post porque controla a la perfección este tema.

Solución:

Aquí está mi comprensión de los métodos. Principalmente, estos se basan en la API, ya que no los uso todos en la práctica.

guardar o actualizar
Las llamadas guardan o actualizan dependiendo de algunos controles. Por ejemplo, si no existe ningún identificador, se llama a guardar. De lo contrario, se llama a la actualización.

salvar
Persiste una entidad. Asignará un identificador si no existe uno. Si uno lo hace, esencialmente está haciendo una actualización. Devuelve el ID generado de la entidad.

actualizar
Intenta conservar la entidad utilizando un identificador existente. Si no existe ningún identificador, creo que se lanza una excepción.

guardar o actualizar copiar
Esto está en desuso y ya no debe usarse. En cambio hay…

unir
Ahora aquí es donde mi conocimiento comienza a fallar. Lo importante aquí es la diferencia entre entidades transitorias, separadas y persistentes. Para obtener más información sobre los estados de los objetos, eche un vistazo aquí. Con guardar y actualizar, se trata de objetos persistentes. Están vinculados a una sesión para que Hibernate sepa qué ha cambiado. Pero cuando tienes un objeto transitorio, no hay sesión involucrada. En estos casos, debe usar fusionar para actualizaciones y persistir para guardar.

persistir
Como se mencionó anteriormente, esto se usa en objetos transitorios. No devuelve el ID generado.

╔══════════════╦═══════════════════════════════╦════════════════════════════════╗
║    METHOD    ║            TRANSIENT          ║            DETACHED            ║
╠══════════════╬═══════════════════════════════╬════════════════════════════════╣
║              ║       sets id if doesn't      ║   sets new id even if object   ║
║    save()    ║     exist, persists to db,    ║    already has it, persists    ║
║              ║    returns attached object    ║ to DB, returns attached object ║
╠══════════════╬═══════════════════════════════╬════════════════════════════════╣
║              ║       sets id on object       ║             throws             ║
║   persist()  ║     persists object to DB     ║       PersistenceException     ║
║              ║                               ║                                ║
╠══════════════╬═══════════════════════════════╬════════════════════════════════╣
║              ║                               ║                                ║
║   update()   ║           Exception           ║     persists and reattaches    ║
║              ║                               ║                                ║
╠══════════════╬═══════════════════════════════╬════════════════════════════════╣
║              ║  copy the state of object in  ║    copy the state of obj in    ║
║    merge()   ║     DB, doesn't attach it,    ║      DB, doesn't attach it,    ║
║              ║    returns attached object    ║     returns attached object    ║
╠══════════════╬═══════════════════════════════╬════════════════════════════════╣
║              ║                               ║                                ║
║saveOrUpdate()║           as save()           ║            as update()         ║
║              ║                               ║                                ║
╚══════════════╩═══════════════════════════════╩════════════════════════════════╝

  • Consulte el foro de Hibernate para obtener una explicación de las sutiles diferencias entre persistir y guardar. Parece que la diferencia es el momento en que finalmente se ejecuta la instrucción INSERT. Ya que salvar devuelve el identificador, la declaración INSERT debe ejecutarse instantáneamente independientemente del estado de la transacción (que generalmente es algo malo). Persistir no ejecutará ninguna declaración fuera de la transacción que se está ejecutando actualmente solo para asignar el identificador. Guardar/Persistir ambos funcionan en instancias transitoriases decir, instancias que aún no tienen identificador asignado y, como tales, no se guardan en la base de datos.

  • Actualizar y Unir ambos trabajan en instancias separadas, es decir, instancias que tienen una entrada correspondiente en la base de datos pero que actualmente no están asociadas (o administradas por) una sesión. La diferencia entre ellos es lo que le sucede a la instancia que se pasa a la función. actualizar intenta volver a adjuntar la instancia, eso significa que no debe haber otra instancia de la entidad persistente adjunta a la sesión en este momento, de lo contrario, se genera una excepción. unir, sin embargo, simplemente copia todos los valores en una instancia persistente en la sesión (que se cargará si no está cargada actualmente). El objeto de entrada no se cambia. Entonces unir es más general que actualizarpero puede usar más recursos.

Eres capaz de añadir valor a nuestro contenido asistiendo con tu veteranía en las interpretaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *