Spring Транзакционная аннотация, изоляция не работает для READ_UNCOMMITTED - java


1

У меня есть метод в Java, который обернут аннотацией spring Transactional.

У меня есть 2 операции внутри, один - delete, другой - insert. Мой оператор ввода должен полагаться на первую операцию (которая является delete), но теперь из-за первой операции еще не зафиксировано, моя вставка не сработала (уникальное ограничение). Но смешно, что, как правило, в рамках одной и той же транзакции, я должен быть в состоянии читать/видеть незавершенную операцию в той же транзакции (моя старая собственная структура способна это сделать), но это не происходит для моего сценария, вторая вставка все еще не работает, потому что она видит, что данные еще не удалены.

Я пытаюсь использовать выделение READ_UNCOMMITTED, но он не работает.

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

Как я могу сделать это в рамках Spring?

  •  15
  •  1
  • 8 фев 2020 2020-02-08 08:05:55

1 ответ

3

Обычно в спящем режиме в той же транзакции while flushing(committing) it always follows a particular order.

Inserts сначала выполняются, а затем deletes выполняются при очистке.

Так идеально в вашем случае, так как вы deleting до insert просто вызываете enitityManager.flush() явно после delete.

Кроме того, вы также можете посмотреть метод EntityManager.setFlushMode(), где вы можете установить тип режима сброса на commit или auto