首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >事务拦截器CDI JPA JavaSE

事务拦截器CDI JPA JavaSE
EN

Stack Overflow用户
提问于 2015-06-14 03:56:27
回答 1查看 875关注 0票数 0

我使用CDI为DAO做了一个拦截器事务。但是,注入到DAO中的EntityManager与事务拦截器中使用的不同。如何使用相同的EntityManager?

DAO类

代码语言:javascript
复制
public class GenericDAO<T, PK> {

    public final EntityManager manager;

    public GenericDAO(EntityManager manager) {
        this.manager = manager;
    }

    @Transactional
    public T getById(PK pk) {
        Object o = manager.find(getTypeClass(), (Serializable) pk);
        return (T) o;
    }
}

EntityManager制片人:

代码语言:javascript
复制
public class EntityManagerProducer implements Serializable {

    private static final long serialVersionUID = 1L;

    @Produces
    public EntityManager createEntityManager() {
        return Persistence.createEntityManagerFactory("bd").createEntityManager();
    }

    public void closeEntityManager(@Disposes EntityManager manager) {
        if (manager.isOpen()) {
            manager.close();
            System.out.println("CLOSE ENTITY MANAGER !!!!");
        }
    }
}

我看到它被创建了两次,因为方法closeEntityManager上的打印被调用了两次。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-14 17:08:22

由于producer方法具有@Dependent作用域,因此它将为每个注入点生成一个新的EntityManager实例。

顺便说一句,您可能希望签出DeltaSpike (JPA和数据模块),而不是滚动您自己的事务拦截器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30825793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档