繁体   English   中英

Spring @Transactional 阻止打开事务

[英]Spring @Transactional prevent opening of Transaction

我对我的 DAO 类/方法使用 Spring 的@Transactional注释进行 DB 操作。 使用PostgreSQL配置的Hibernate ORM

SessionFactory在配置中使用@Bean创建,并在 DAO 类中使用@Autowired检索。

@Autowired
SessionFactory sessionFactory;

@Transactional(value = "myTransactionManager")
public int getTotalClientsInDatabase() {
    Query countTotalClientsQuery = sessionFactory.getCurrentSession()
            .getNamedQuery(DeviceInfo.COUNT_TOTAL_CLIENTS);
    return Integer.parseInt(countTotalClientsQuery.uniqueResult().toString());
}

每当调用getTotalClientsInDatabase ,总是打开一个事务。

我想阻止打开一个事务,因为它是一个SELECT (DDL) 查询。

如果@Transactional是去除Exception被抛出话说sessionFactory不同步。

如果添加readOnly=true性能会降低 @Transactional(value = "myTransactionManager", readOnly=true)

有什么办法可以阻止Session开启Transaction ??

在您的情况下,良好的做法是用SUPPORTS的传播级别标记事务:

支持当前事务,如果不存在则以非事务方式执行。

所以如果父方法不在事务上下文中,这个方法也不会,但可以。

@Transactional(propagation=Propagation.SUPPORTS, value = "myTransactionManager")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM