无法将 ContextTransactionalCallable 与 TransactionProvider 一起使用

PrE*_*Eto 5 jooq spring-boot

我有一个错误,我无法解决。

我正在使用 Spring 和 JOOQ。

这里发生错误:

   @Transactional
    public UUID create(List<User> users) {
        UUID uuid = UUID.randomUUID();
        dslContext.transaction(() -> {
            dslContext
                    .insertInto(APPLE, APPLE.APPLE_ID, APPLE.TITLE)
                    .values(uuid, uuid.toString())
                    .execute();

            users.forEach(user -> {
                dslContext
                        .insertInto(APPLE_MEMBERS, APPLE_MEMBERS.APPLE_ID, APPLE_MEMBERS.USER_ID)
                        .values(uuid, user.getUserId())
                        .execute();
            });

        });

        return uuid;
    }
Run Code Online (Sandbox Code Playgroud)

错误:

org.jooq.exception.ConfigurationException: Cannot use ContextTransactionalCallable with TransactionProvider of type class org.springframework.boot.autoconfigure.jooq.SpringTransactionProvider
Run Code Online (Sandbox Code Playgroud)

也许有人有同样的错误或知道如何解决这个错误?

Luk*_*der 5

使用开箱即用的功能:

您必须选择以下两种方法之一:

  • Spring通过注解进行声明式事务管理
  • jOOQ 通过其 API 进行编程式事务管理

开箱即用,它们无法组合。在你的具体情况下,我不明白你为什么要这样做。嵌套的编程事务与外部的声明性事务具有完全相同的范围。这是多余的。

使用自定义TransactionProvider实现

您可以编写自己的TransactionProvider程序,能够与 Spring 的事务管理进行通信,并允许在@Transactional带注释的方法中嵌入嵌套事务,但我通常建议不要这样做。选择两种方法之一。