首页 > 解决方案 > Jdbi3:具有多个dao和@Transaction注解的事务

问题描述

我必须执行一个涉及多个 dao 中的方法的事务,所以我使用的是类似的东西:

    jdbi.useHandle(handle -> {

        handle.useTransaction(h -> {

            Dao1 dao1 = h.attach(Dao1.class);
            Dao2 dao2 = h.attach(Dao2.class);
            dao1.method1();
            dao2.method2();
        });
    });

但是如果例如在Dao1method1 中用 注释@Transaction,例如:

public interface Dao1 {

   @SqlUpdate
   @Transaction
   public void method1();
}

上面的句柄部分会在同一个事务中执行这两种方法吗?还是method1会在执行过程中开启一个新事务?

标签: javajdbijdbi3

解决方案


如果您想在另一个事务中重用 DAO 方法,请不要使用 @Transaction 注释。这会导致性能下降和回滚检查点复杂,如果 DBMS 可以支持,则会导致异常。


推荐阅读