Actualización con JPA

3 views
Skip to first unread message

Leslie Solorzano

unread,
Nov 15, 2009, 8:14:45 PM11/15/09
to is1_unal_2009_02
Ayer trabajando con los compañeros en JPA descubrimos que no sabemos
bien como hacer una actualización para que quede guardada en la base
de datos.

Digamos que por ejemplo queremos modificar un booleano que tiene el
paciente por dentro que corresponde a si tiene o no una cita
pendiente, no sabemos como actualizarlo por medio del DAO. Este es el
codigo q tenemos en el DAO de paciente para actualizar.

public void actualizar(Paciente paciente) {
EntityManagerFactory emf =
Persistence.createEntityManagerFactory("CitasMedicasPU");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
try {
em.refresh(paciente);
em.getTransaction().commit();


} catch (Exception e) {
e.printStackTrace();
em.getTransaction().rollback();
} finally {
em.close();
}
}

Asumimos que se hace con refresh pero no sabemos eso exactamente qué
haga. No sabemos si toque hacer una query como la hacemos. Nos puedes
mostrar el camino Miguel??

miguel

unread,
Nov 15, 2009, 8:32:54 PM11/15/09
to is1_unal...@googlegroups.com
Buenas noches Leslie

El 15 de noviembre de 2009 20:14, Leslie Solorzano <zloy.sm...@gmail.com> escribió:

Ayer trabajando con los compañeros en JPA descubrimos que no sabemos
bien como hacer una actualización para que quede guardada en la base
de datos.

Eso es bueno, veamos cuáles son las dudas

Digamos que por ejemplo queremos modificar un booleano que tiene el
paciente por dentro que corresponde a si tiene o no una cita
pendiente, no sabemos como actualizarlo por medio del DAO. Este es el
codigo q tenemos en el DAO de paciente para actualizar.

  public void actualizar(Paciente paciente) {
       EntityManagerFactory emf =
Persistence.createEntityManagerFactory("CitasMedicasPU");
       EntityManager em = emf.createEntityManager();
       em.getTransaction().begin();
       try {
           em.refresh(paciente);
           em.getTransaction().commit();


       } catch (Exception e) {
           e.printStackTrace();
           em.getTransaction().rollback();
       } finally {
           em.close();
       }
   }

Asumimos que se hace con refresh pero no sabemos eso exactamente qué
haga. No sabemos si toque hacer una query como la hacemos. Nos puedes
mostrar el camino Miguel??


Nop, en realidad refresh hace el proceso inverso, es decir, refresca la entidad dinámica a partir de la entidad persistente, trayendo la info desde la DB:
http://java.sun.com/javaee/5/docs/api/javax/persistence/EntityManager.html#refresh%28java.lang.Object%29
Lo que uds necesitan es hacer un merge:
http://java.sun.com/javaee/5/docs/api/javax/persistence/EntityManager.html#merge%28T%29

Espero haber aclarado el tema, hasta luego.

--
Miguel Cubides
Ingeniería de Sistemas
Universidad Nacional
Reply all
Reply to author
Forward
0 new messages