Проблемы с транзакциями в Spring и Hibernate - PullRequest
0 голосов
/ 06 августа 2020

Я хочу написать @Scheduled метод, который должен производить некоторые операции с БД. Короче говоря, он должен обновлять данные в таблице (добавлять новые записи, перезаписывать существующие и удалять неиспользуемые. Сущность определяется полем name). После первой попытки я получил что-то вроде LazyInitializationException: No Proxy. Метод Annotate @Scheduled с аннотацией @Transactional мне немного помог, но теперь у меня другая проблема: перезапись данных выглядит так:

Set<String> names = items.stream().map(Item::getName).collect(Collectors.toSet());
myService.deleteByName(names); //delete and save instead update
myService.save(items);

Но теперь я получаю ConstraintViolationException, потому что на нем есть уникальный ключ столбцы name и myService.deleteByName(names) не действуют (я думаю, это потому, что этот метод вызывается из метода @Transactional).

Скажите, пожалуйста, что я делаю не так

1 Ответ

0 голосов
/ 06 августа 2020

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...