5

到目前为止,我仍然在没有 DAO 的情况下使用 JSF 和 JPA。现在我想使用 DAO。但是如何在 DAO 类中初始化 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 的解决方案?

谢谢。

4

3 回答 3

5

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

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

于 2009-12-07T16:47:11.263 回答
5

如果你的容器没有为你注入 EntityManager,你可以得到一个:

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

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

于 2009-12-07T16:56:31.577 回答
0

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

于 2011-05-09T10:52:20.610 回答