我使用带咖啡因缓存的没有 DAO 的暴露。常见的用法是
transaction {
val row = rowService.getById(1)!!
}
RowService 首先尝试在缓存中查找行,如果为负,则对数据库运行查询。我怀疑即使没有任何查询的事务块也会有一些开销,如果我大部分时间都缓存命中,我想在 RowService 中移动事务块,它从数据库中解析数据,但是我不想在过程。
如何检查我是否已经在事务块中并重新使用它或打开新的并运行我的 fetch 语句?
我使用带咖啡因缓存的没有 DAO 的暴露。常见的用法是
transaction {
val row = rowService.getById(1)!!
}
RowService 首先尝试在缓存中查找行,如果为负,则对数据库运行查询。我怀疑即使没有任何查询的事务块也会有一些开销,如果我大部分时间都缓存命中,我想在 RowService 中移动事务块,它从数据库中解析数据,但是我不想在过程。
如何检查我是否已经在事务块中并重新使用它或打开新的并运行我的 fetch 语句?
默认情况下,嵌套transaction
块将重用最外层的Transaction
实例。但是,如果您想确保Transaction
从代码开始,您可以检查它:TransactionManager.currentOrNull() != null
从 Exposed 0.16.1 开始,可以使用嵌套事务。要启用此功能,您应该将所需数据库实例上的 useNestedTransactions 设置为 true。
只是不要设置useNestedTransactions
(或者更好,明确地将其设置为false
),您将获得所需的行为。