@Transactional如何在JPA 2.0的guice-persist中工作?

时间:2019-01-03 11:46:48

标签: java jpa-2.0 guice guice-persist

我与JPA和Hibernate ORM一起使用guice-persist。 在ServiceLayer中,我在要调用多个不同DAO的函数之一上使用@Transactional

ServiceLayer.java

...
@Transactional
public List<DetailedInfo> getDetailedInfo() {
    dao1.getDetailedInfo();
    dao2.getDetailedInfo();
    ... 

DAO1.java

...
private Provider<EntityManager> emprovider;

@Getter
private final Class<T> entityClass;

@Inject
protected DAO1(Provider<EntityManager> emprovider) {
        this.entityManagerProvider = entityManagerProvider;
        this.entityClass = EntityClass1.class;
}

EntityManager getEntityManager() {
    return entityManagerProvider.get();
}

public List<T> getAll() {
    final EntityManager em = getEntityManager();
    final CriteriaBuilder cb = em.getCriteriaBuilder();
    final CriteriaQuery<T> criteriaQuery = cb.createQuery(entityClass);
    final Root<T> root = criteriaQuery.from(entityClass);
    criteriaQuery.select(root);
    return em.createQuery(criteriaQuery).getResultList();
}

其他DAO的定义相似。

在这里,我没有关闭DAO中的entitymanager。从ServiceLayer的函数中使用@Transactional批注调用DAO函数。据我了解,JpaLocalTxnInterceptor有责任关闭EntityManager范围内的所有@Transactional

交易后它还会释放数据库连接吗?

0 个答案:

没有答案