簡體   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