Java Spring@Transactional阻止打开事务
Iam将Spring的Java Spring@Transactional阻止打开事务,java,database,postgresql,hibernate,spring-data,Java,Database,Postgresql,Hibernate,Spring Data,Iam将Spring的@Transactional注释用于数据库操作的我的DAO类/方法。 HibernateORM配置了PostgreSQL SessionFactory在配置中使用@Bean创建,并在DAO类中使用@Autowired检索 @Autowired SessionFactory sessionFactory; @Transactional(value = "myTransactionManager") public int getTotalClientsIn
@Transactional
注释用于数据库操作的我的DAO类/方法。
Hibernate
ORM配置了PostgreSQL
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());
}
每当调用getTotalClientInDatabase
时,事务总是打开的
我想阻止打开事务,因为它是一个SELECT
(DDL)查询
如果删除了@Transactional
,则抛出异常,说明会话工厂
未同步
如果添加了readOnly=true
。
@Transactional(value=“myTransactionManager”,readOnly=true)
是否有任何方法可以阻止会话
打开事务
?对于您来说,最好使用支持的传播级别标记事务:
支持当前事务,如果没有,则以非事务方式执行
存在
因此,如果父方法不在事务上下文中,则此方法也不在事务上下文中,但可以
@Transactional(propagation=Propagation.SUPPORTS, value = "myTransactionManager")