Persistence i refresh

0

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.

0

o_O
Operacje na bazie powinieneś mieć w osobnej warstwie Dao która ma wstrzyknięty PersistenceContext

0

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.

0
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 ; 
0

Nie, Dao nie powinno być klasą Entity ;]

0

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1