Есть ли способ повторить транзакцию, которая не удалась с исключением отката в 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 был до начала транзакции?