Повторите транзакцию JPA - PullRequest
0 голосов
/ 12 декабря 2018

Есть ли способ повторить транзакцию, которая не удалась с исключением отката в JPA?Насколько я знаю, все управляемые объекты становятся отсоединенными в случае сбоя транзакции.

В основном я хочу: я загружаю объект, пользователь вносит изменения в этот объект и затем сохраняет эти изменения.

Если пользователь вносит корректные изменения, все работает нормально.Но если пользователь делает ошибку и транзакция завершается неудачно, ему в настоящее время приходится отказаться от всей работы, перезагрузить сущность, повторить работу (без ошибки) и повторить транзакцию.

Я попытался использовать новуюEntityManager просто для сохранения в основном так:

    tmpEm = createEntityManager();
    final EntityObject find = tmpEm.findById(EntityObject.class, toPersistEntity.getId());
    if (find != null) {
      tmpEm.beginTransaction();
      tmpEm.merge(toPersistEntity);
      tmpEm.commitTransaction();
    } else {
      tmpEm.beginTransaction();
      tmpEm.persist(find);
      tmpEm.commitTransaction();
    }

, но это не всегда работает, поскольку EntityObject содержит коллекцию OneToMany, и я не знаю, были ли добавлены или какие объекты были добавлены (ну, я мог бы это выяснить, но для этого потребуется код, специфичный для каждой сущности, который я могу сохранить).

Есть ли лучший способ?Могу ли я как-то вернуться в состояние, в котором EntityManager был до начала транзакции?

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