我们如何确定我们已经处于交易冻结状态?

时间:2019-12-08 12:11:28

标签: kotlin kotlin-exposed

我使用不含DAO的裸露咖啡因缓存。 常见用法是

transaction {
  val row = rowService.getById(1)!! 
} 

RowService尝试首先在缓存中查找行,如果为否,则再次运行查询数据库。我怀疑即使没有任何查询,事务块也会有一些开销,并且如果我大部分时间都被缓存命中,我想将事务块移到RowService那里,它可以解析数据库中的数据,但是我不想在数据库中创建嵌套事务过程。

如何检查我是否已进入事务块并重新使用它或打开新的块并运行我的fetch语句,然后

2 个答案:

答案 0 :(得分:2)

默认情况下,嵌套的transaction块将重用最外面的Transaction实例。 但是,如果要确保代码中有Transaction开头,则可以使用以下命令进行检查:TransactionManager.currentOrNull() != null

答案 1 :(得分:0)

  

Since Exposed 0.16.1 it is possible to use nested transactions. To enable this feature you should set useNestedTransactions on desire Database instance to true.

只需不设置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),您将获得所需的行为。