Невозможно использовать ContextTransactionalCallable с TransactionProvider - PullRequest
0 голосов
/ 16 сентября 2018

У меня ошибка, которую я не могу решить.

Я использую 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;
    }

Ошибка:

org.jooq.exception.ConfigurationException: Cannot use ContextTransactionalCallable with TransactionProvider of type class org.springframework.boot.autoconfigure.jooq.SpringTransactionProvider

Может быть, у кого-то была такая же ошибка или есть идеи, как ее решить?

1 Ответ

0 голосов
/ 17 сентября 2018

Использование готовых функций:

Вы должны выбрать один из двух подходов:

  • Декларативное управление транзакциями Spring с помощью аннотаций
  • Программная транзакция jOOQуправление через его API

Из коробки они не могут быть объединены.В вашем конкретном случае я не понимаю, почему вы хотели бы сделать это.Вложенная программная транзакция имеет ту же область действия, что и внешняя декларативная транзакция.Это избыточно.

Использование пользовательских TransactionProvider реализаций

Вы можете написать свой собственный TransactionProvider, который может взаимодействовать с управлением транзакциями Spring и позволяет встраивать вложенные транзакции в @Transactional аннотированныйметоды, но я вообще советую против этого.Выберите один из двух подходов.

...