使用JSF,JPA和DAO。没有春天?

时间:2009-12-07 16:42:09

标签: java spring jsf jpa dao

到目前为止,我还没有使用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的解决方案吗?

感谢。

3 个答案:

答案 0 :(得分:5)

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

实际上,Java EE 5+并不真正提倡使用DAO模式(Has JPA Killed the DAO?是关于这个主题的好文章)并包装实现Domain Store模式的实体管理器,这样做很漂亮在DAO中,DAO的大部分内容在我看来并不合理。

答案 1 :(得分:5)

如果您的容器没有为您注入EntityManager,您可以使用:

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

来自persistence.xml中定义的单位的“jpatest”

答案 2 :(得分:0)

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