-1

试图从文档中找出这种情况:

http://jdbi.org/#_attached_to_handle

说你有

SomeClass dao1 = dbi.onDemand(SomeClass.class)

那么你有另一种方法,其他地方的东西:

    try ( Handle handle = dbi.open(); ) {
        SomeClass dao2 = handle.attach(SomeClass.class);

        // What happens here if I use dao1 ? 

        dao1.insert(...)
        dao2.insert(...)
        dao2.insert(...)
        dao1.insert(...)
    }

请注意,在这些情况下它们是相同的类型。

每个调用的插入都会有一个新的连接/事务,还是将它们全部分组到一个事务中?

从文档中不清楚。

我的想法是,在下面,两者的行为相同,并且 dao1 在调用 insert 时将检查是否存在正在进行的事务/连接,并针对这种类型并使用它。

然而文档说这对于 onDemand 实例是正确的,但是,这个 dao2 是附加的,而不是一个作为 dao1 的 onDemand。

4

1 回答 1

1

每个调用的插入都会有一个新的连接/事务,还是将它们全部分组到一个事务中?

调用dao2将从显式打开的一个事务中分组handle

每个dao1方法调用的调用将使用单独的事务(来自javadoc: )。Jdbi#onDemandan extension which opens and closes handles (as needed) for individual method calls

如果你想SqlObject在事务范围内执行不同的方法,你有几个选择:

  • Jdbi#inTransaction/ Jdbi#useTransaction: 适用于两者onDemand/attach
  • @Transaction和的组合@CreateSqlObject,如文档中所示
于 2021-11-03T15:02:40.300 回答