2016-04-28 6 views
0

Ich habe JSF Maven-Projekt mit Hibernate. Es gibt einige DAO-Klassen im Projekt, aber ich denke, dass die Implementierung gescheitert ist.Wie bekomme ich EntityManager in BaseDao (Maven + JSF + Winterschlaf)

public class HibernateUtil { 

    private static final SessionFactory sessionFactory; 

    static { 
     try { 
      // Create the SessionFactory from standard (hibernate.cfg.xml) 
      // config file. 
      Configuration configuration = new Configuration().configure(); 
      StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder(). 
        applySettings(configuration.getProperties()); 
      sessionFactory = configuration.buildSessionFactory(builder.build()); 
     } catch (Throwable ex) { 
      // Log the exception. 
      System.err.println("Initial SessionFactory creation failed." + ex); 
      throw new ExceptionInInitializerError(ex); 
     } 
    } 

    public static SessionFactory getSessionFactory() { 
     return sessionFactory; 
    } 
} 

In jedem DAO nenne ich diese Methode

Session mySession = HibernateUtil.getSessionFactory().openSession(); 

Und danach tun Transaktionen.

Nun möchte ich generische Klasse erstellen und CRUD-Basisoperationen in ihm erstellen. Aber ich brauche EntityManager. Wie kann ich getEntityManager in meinem BaseDao?

Im Frühjahr ich es tun:

public class BaseJpaDao<E> implements BaseDao<E>{ 
    protected Class<?> entityClass; 

    @PersistenceContext(unitName = "mainDataBase") 
    private EntityManager entityManager; 

    public BaseJpaDao(Class<?> entityClass) { 
     this.entityClass = entityClass; 
    } 

    @Override 
    public E persist(E e) { 
     entityManager.persist(e); 
     return e; 
    } 

Aber wie es Frühling in nicht-Projekt?

Antwort

0

Verwenden überwintert Fabrikmethoden:

// Use persistence.xml configuration 
EntityManagerFactory emf = Persistence.createEntityManagerFactory("mainDataBase") 
EntityManager em = emf.createEntityManager(); 
// Retrieve an application managed entity manager  
// Work with the EM 
em.close(); 

vom docs genommen.

+0

Was bedeutet diese Option -myPersistenceContext Ich muss Pfad zu myPersistenceContext.xml festlegen? – user5620472

+0

Es tut mir leid, es sollte Persistenz-Einheit sein. Sie sollten eine [persistence.xml] (http://docs.oracle.com/cd/E16439_01/doc.1013/e13981/cfgdepds005.htm) in src/META.INF (oder src/main/resources/META.INF) erstellen. INF, wenn es ein Maven-Projekt ist) und benennen Sie die Einheit wie in Ihrer Frühlingskonfiguration. – Stefan