Witam, chciałbym prosić o pomoc, mianowicie mam problem z odświeżaniem informacji obiektu z bazy.
Chodzi o to że przesyłam do metody sam obiekt, czy powinienem przesyłać także EnitityManager dla tego obiektu ?
Kod załączę za jakiś czas - siedzę na windzie a IDE mam akurat na Linuksie.
o_O
Operacje na bazie powinieneś mieć w osobnej warstwie Dao która ma wstrzyknięty PersistenceContext
Dokładnie zrobiłem tak:
public class Database implements Serializable {
private EntityManagerFactory emf = null;
private EntityManager em = null;
public Database() {
emf = Persistence.createEntityManagerFactory("DOCSAFEDB");
}
public DataUser findUser(String key) {
DataUser user = null;
if (em == null) {
em = emf.createEntityManager();
}
try {
user = em.find(DataUser.class, key);
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
} finally {
em.clear();
em.close();
em = null;
}
return user;
}
public void updateUser(DataUser usr) {
if (em == null) {
em = emf.createEntityManager();
}
em.getTransaction().begin();
try {
usr.setLastLogin(new Date());
em.merge(usr);
em.getTransaction().commit();
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
em.getTransaction().rollback();
} finally {
em.clear();
em.close();
em = null;
}
}
public static List<DataPdf> refreshPdfList(DataUser dbUser) {
EntityManager em = Persistence.createEntityManagerFactory("DOCSAFEDB").createEntityManager();
try {
em.persist(dbUser);
em.refresh(dbUser); //re-read the state (after the trigger executes)
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
} finally {
em.clear();
em.close();
em = null;
}
return dbUser.getPdfList();
}
}
Tylko w Enityty Usera mam @ManyToMany jako listę plików PDF.
Shalom napisał(a):
o_O
Operacje na bazie powinieneś mieć w osobnej warstwie Dao która ma wstrzyknięty PersistenceContext
Z tego co zrozumiełam powinienem mieć Entity User z wpisem
@javax.persistence.PersistenceContext(unitName="persistence_sample")
private EntityManager em ;
Nie, Dao nie powinno być klasą Entity ;]
Jak dla mnie to dziwnie to trochę zrobiłeś. Masz klasę DataUser i domyślam się, że jest to klasa zmapowana z bazy danych? Do tej klasy powinieneś utworzyć jakąś klasę DAO, wstrzyknąć tam persistenceContext i w tam robić wszelkie manipulacje na tym obiekcie. Może popatrz jak inni to robią na tutorialach w internecie. Np. coś takiego: http://www.javacodegeeks.com/2012/06/full-webapplication-jsf-ejb-jpa-jaas.html