【问题标题】:How can I get EntityManager in BaseDao (Maven+JSF+hibernate)如何在 BaseDao 中获取 EntityManager (Maven+JSF+hibernate)
【发布时间】:2016-08-22 15:59:05
【问题描述】:

我有一个带有 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;
    }

但是在非spring项目中怎么做呢?

【问题讨论】:

    标签: java hibernate maven hibernate-entitymanager


    【解决方案1】:

    使用 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();
    

    取自docs

    【讨论】:

    • 这个选项是什么意思 -myPersistenceContext 我需要设置 myPersistenceContext.xml 的路径?
    • 对不起,应该是persistence-unit。您应该在 src/META.INF(或 src/main/resources/META-INF,如果它是一个 maven 项目)中创建一个 persistence.xml,并像在 spring 配置中那样命名该单元。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-05
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-26
    相关资源
    最近更新 更多