Consulta sobre persistencia de entidades con Hibernate #165
-
Buenas! De la clase de persistencia nos quedó un poco la idea de que con Hibernate, al hacer algo del estilo "entityManager.persist(objetoAPersistir)", ya nos podíamos desentender y dejar que el ORM se encargue de hacer todo lo necesario para persistir nuestro objeto/entidad. El tema es que probando notamos que, haciendo solo esto, no se reflejan los cambios en la base (ya sea MySQL o SQLServer). Algo que googleamos y que si funciona es lo siguiente:
Pero nos comentaron que el hecho de crear una transacción para cada cosa que queremos persistir en la base quizá no es la idea. ¿Cómo sería la forma correcta de trabajar con esto? Gracias! Saludos. |
Beta Was this translation helpful? Give feedback.
Replies: 5 comments
-
Buenas, a nuestro grupo nos sucedió que no funcionaba si no agregábamos el begin y commit (cómo hiciste vos) y lo pusimos en el repositorio, pero nos dijeron que la forma de hacerlo era poniéndolos en el main y no en la lógica. Saludos! |
Beta Was this translation helpful? Give feedback.
-
Genial, la idea sería usar las transacciones pero hacerlas más bien generales y no para cada acción en particular, ¿no? |
Beta Was this translation helpful? Give feedback.
-
Claro, tengo entendido que es para que puedas commitear o rollbackear cúando vos lo necesites, si lo hacés de la otra forma lo va a hacer cada vez que accedas al repositorio y tal vez solo querés commitear si una cantidad x de cosas se persistieron correctamente. Por ejemplo: try {
entityManager.getTransaction().begin();
for(Perro unPerro : perros) {
entittyManager.persist(unPerro);
{
entityManager.getTransaction().commit();
} catch(Exception e) {
entityManager.getTransaction().rollback();
} |
Beta Was this translation helpful? Give feedback.
-
Clarísimo, Brian, muchas gracias! Saludos. |
Beta Was this translation helpful? Give feedback.
-
@Gonzalo-Avila @brianstremel pronto vamos a ver donde abrir y cerrar transacciones cuando tenemos operaciones web. Por otro lado en los tests no deberían hacer |
Beta Was this translation helpful? Give feedback.
@Gonzalo-Avila @brianstremel pronto vamos a ver donde abrir y cerrar transacciones cuando tenemos operaciones web.
Por otro lado en los tests no deberían hacer
commit()
porque eso haría que tenga efecto, lo que pueden hacer es unentityManager().flush()
creo que era el mensaje que hace que mande los inserts/updates a la base si necesitan forzarlos en el test pero sin commitear la transaccion.