我使用不含DAO的裸露咖啡因缓存。 常见用法是
transaction {
val row = rowService.getById(1)!!
}
RowService尝试首先在缓存中查找行,如果为否,则再次运行查询数据库。我怀疑即使没有任何查询,事务块也会有一些开销,并且如果我大部分时间都被缓存命中,我想将事务块移到RowService那里,它可以解析数据库中的数据,但是我不想在数据库中创建嵌套事务过程。
如何检查我是否已进入事务块并重新使用它或打开新的块并运行我的fetch语句,然后
答案 0 :(得分:2)
默认情况下,嵌套的transaction
块将重用最外面的Transaction
实例。
但是,如果要确保代码中有Transaction
开头,则可以使用以下命令进行检查:TransactionManager.currentOrNull() != null
答案 1 :(得分:0)
只需不设置select
extract( day from diff ) Days,
extract( hour from diff ) Hours,
extract( minute from diff ) Minutes
from (
select CAST(to_date('01-JAN-2019 09:00 AM', 'DD-MON-YYYY HH:MI AM') as timestamp)
- CAST(to_date('01-JAN-2019 05:00 AM', 'DD-MON-YYYY HH:MI AM') as timestamp) diff
from dual
)
(或者更好地将其显式设置为useNestedTransactions
),您将获得所需的行为。