Java 如何在BaseDao中获得EntityManager(Maven+;JSF+;hibernate)

Java 如何在BaseDao中获得EntityManager(Maven+;JSF+;hibernate),java,hibernate,maven,hibernate-entitymanager,Java,Hibernate,Maven,Hibernate Entitymanager,我有一个带Hibernate的JSF maven项目。项目中有一些DAO类,但我认为它的实现失败了 public class HibernateUtil { private static final SessionFactory sessionFactory; static { try { // Create the SessionFactory from standard (hibernate.cfg.xml)

我有一个带Hibernate的JSF maven项目。项目中有一些DAO类,但我认为它的实现失败了

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
。如何在BaseDao中
getEntityManager

在春天,我这样做:

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;
    }
公共类BaseJpaDao实现BaseDao{
保护类实体类;
@PersistenceContext(unitName=“mainDataBase”)
私人实体管理者实体管理者;
公共BaseJpaDao(类entityClass){
this.entityClass=entityClass;
}
@凌驾
公共电子商务(E){
entityManager.persist(e);
返回e;
}

但是如何在非spring项目中实现它呢?

使用Hibernates工厂方法:

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

摘自。

使用Hibernates工厂方法:

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

摘自。

这个选项-myPersistenceContext是什么意思?我需要设置myPersistenceContext.xml的路径?对不起,它应该是持久性单元。您应该在src/META.INF(或者src/main/resources/META-INF,如果是maven项目)中创建一个并像在spring配置中那样命名该单元。这个选项-myPersistenceContext是什么意思?我需要设置myPersistenceContext.xml的路径?对不起,它应该是持久性单元。您应该在src/META.INF(或者src/main/resources/META-INF,如果是maven项目)中创建一个,并像在spring配置中那样命名该单元。