【问题标题】:Using JSF, JPA and DAO. Without Spring?使用 JSF、JPA 和 DAO。没有春天?
【发布时间】:2010-12-24 02:08:53
【问题描述】:

到目前为止,我仍然在没有 DAO 的情况下使用 JSF 和 JPA。现在我想使用 DAO。但是如何在 DAO-Classes 中初始化 EntityManager?

public class AdresseHome {

    @PersistenceContext
    private EntityManager entityManager;

    public void persist(Adresse transientInstance) {
        log.debug("persisting Adresse instance");
        try {
            entityManager.persist(transientInstance);
            log.debug("persist successful");
        } catch (RuntimeException re) {
            log.error("persist failed", re);
            throw re;
        }
    }
}

我是要使用 Spring 还是有没有没有 Spring 的解决方案?

谢谢。

【问题讨论】:

    标签: java spring jsf jpa dao


    【解决方案1】:

    如果您的容器没有为您注入 EntityManager,您可以通过以下方式获得一个:

    EntityManagerFactory factory;
    factory = Persistence.createEntityManagerFactory("jpatest");
    EntityManager em = factory.createEntityManager();
    

    persistence.xml 中定义的单元中的“jpatest”

    【讨论】:

    • 所以我还需要为每个DAO创建一个EntityManager?
    【解决方案2】:

    Java EE 5 不支持在非托管组件中注入,因此如果没有 Spring,您将不得不在此处使用 应用程序管理的实体管理器(从而在应用程序级别管理其生命周期) .

    实际上,Java EE 5+ 并不真正提倡使用 DAO 模式(Has JPA Killed the DAO? 是关于这个主题的一篇不错的文章)并包装实现了 Domain Store 模式的实体管理器,它几乎完成了 DAO 的工作确实,在我看来,在 DAO 中并没有什么意义。

    【讨论】:

      【解决方案3】:

      您的另一个选择是将您的 DAO 本身实现为 SLSB。这样您就可以注入 EntityManger 而不是创建它。但它有它自己的坏影响,比如太多的会话 bean。链接豆类等,这是一种不好的做法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-29
        • 2012-06-19
        • 2021-06-23
        • 2013-04-18
        • 2021-10-15
        • 2016-11-28
        • 2015-08-08
        • 2011-09-23
        相关资源
        最近更新 更多