2016-04-28 3 views
0

У меня есть проект JSF maven с Hibernate. В проекте есть несколько классов DAO, но я думаю, что это неудачная реализация.Как я могу получить EntityManager в BaseDao (Maven + JSF + hibernate)

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

В каждом DAO я называю этот метод

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

И после этого делать сделки.

Теперь я хочу создать общий BaseDAO класс и создать базовые операции CRUD в нем. Но мне нужно получить EntityManager. Как я могу getEntityManager в моем BaseDao?

Весной я делаю это:

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

Но как это сделать в не весной проект?

ответ

0

Использование зимует фабричные методы:

// 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(); 

Взятые из docs.

+0

Что означает этот параметр -myPersistenceContext Мне нужно установить путь к myPersistenceContext.xml? – user5620472

+0

Извините, это должен быть блок постоянной. Вы должны создать файл [persistence.xml] (http://docs.oracle.com/cd/E16439_01/doc.1013/e13981/cfgdepds005.htm) в src/META.INF (или src/main/resources/META- INF, если это проект maven) и назовите это устройство, как в вашей весенней конфигурации. – Stefan

Смежные вопросы