Java: когда может произойти сбой отката в jpa? - PullRequest
0 голосов
/ 07 мая 2018

Я использую JPA и начинаю транзакцию до вызова функции, которая, в свою очередь, сохраняет некоторые данные в базе данных. Затем транзакция завершается после выполнения вызова функции. Но я также использую entityManager.flush () и entityManager.clear (), предполагая, что память будет освобождена при использовании clear (). до завершения транзакции. Пожалуйста, поправьте меня. Когда я запустил программу, откат не удался.

Я также пытался удалить flush () и clear (), но я не могу откатиться назад. Когда в моем сценарии может произойти сбой отката, когда я использую clear и flush?

1 Ответ

0 голосов
/ 07 мая 2018

Я также использую предположения entityManager.flush () и entityManager.clear () эта память будет освобождена при использовании clear ().

Ну, вы должны перестать гадать и начать читать какую-то документацию.

EntityManager автоматически сбрасывает tx.commit(), и менеджер сущностей очищается при его закрытии. Если вы используете транзакции менеджера контейнеров, вам не следует беспокоиться о сбросе и очистке менеджеров сущностей. Если вы используете JavaSE, тогда ваш обычный рабочий процесс с БД должен выглядеть следующим образом:

  1. Создать новый менеджер сущностей
  2. Начать транзакцию
  3. Делай свою работу - удаляй / обновляй / вставляй что угодно
  4. Фиксация транзакции / откат при необходимости
  5. Закрыть менеджер сущностей

Обычно это будет закрыто в маленьком try-catch-finally блоке

EntityManager - это легкий и недолговечный компонент. Вы должны создать его именно тогда, когда вам это нужно, и закрыть его сразу после его использования. То, что должно быть единичным экземпляром и создано (в большинстве случаев) только один раз, это EntityManagerFactory

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