Объект не зафиксирован, когда ожидается (Hibernate ORM с Panache) - PullRequest
0 голосов
/ 12 февраля 2020

Во время выполнения процесса я открываю две транзакции:

  • Одна для создания объекта и информирования о начале процесса;
  • Другая для изменения созданного объекта в первой транзакции, сообщающей, что процесс завершен;

Однако после выполнения метода второй транзакции, если я запрашиваю базу данных, значение еще не было обновлено. Я ожидал, что после того, как выполнение метода с аннотацией @transactional закончено, объект уже передан в базу данных.

Воспроизведение ситуации в проекте: https://github.com/emersonl91/quarkus-test

Важные строки: https://github.com/emersonl91/quarkus-tests/blob/master/code-with-quarkus/src/main/java/org/acme/MyService.java#L32

https://github.com/emersonl91/quarkus-tests/blob/master/code-with-quarkus/src/test/java/org/acme/ExampleResourceTest.java#L37


Редактировать 1 : Я проверил классы UserTransaction и TransactionManager, но такая же проблема также возникает.


Edit 2: В методеactionTest я добавил аннотацию @transactional (NOT_SUPPORTED) , в методах сохранения и обновления я добавил аннотацию @transactional (REQUIRES_NEW). Результат не изменился.

Ответы [ 2 ]

0 голосов
/ 12 февраля 2020

Требуется уровень распространения транзакции по умолчанию. Таким образом, если один метод (аннотированный @Transactional) вызывает другой метод (аннотированный @Transactional), второй метод будет использовать существующую транзакцию первого метода, а не создавать новую. Чтобы форсировать новую транзакцию для второго метода, необходимо изменить уровень распространения второго метода на REQUIRES_NEW. Тем не менее, я никогда не нашел вариант использования для этого.

См. https://www.baeldung.com/spring-transactional-propagation-isolation

0 голосов
/ 12 февраля 2020

Что произойдет, если вы перейдете @Transactional к методу transactionTest()?

...