Исходя из вашего вопроса, вот что я понимаю о вашей проблеме.
Вы хотите заключить вызов действия в транзакцию. Если метод validate записывает ошибки проверки, вы хотите откатить транзакцию. Предположительно, вы также хотите выполнить откат в случае ошибки.
Решение
Создать перехватчик, который будет:
- Начать транзакцию
- Вызвать действие внутри блока try / catch
- Откат транзакции, если есть исключение или если в действии есть какие-либо ошибки проверки (это можно обнаружить с помощью action.hasErrors)
- Совершить транзакцию
Возможно, вы захотите, чтобы этот перехватчик был определен довольно рано в стеке. Я не знаю каких-либо предварительно созданных перехватчиков для этого (хотя они могут быть и некоторые), но его должно быть довольно легко собрать.
Update
Я не использую Spring, поэтому не могу сказать, как там работает поддержка транзакций JPA, но вы можете обрабатывать транзакции для вашего EntityManager, например:
try {
entityManager.getTransaction().begin();
// do your thing
entityManager.getTransaction().commit();
} catch (Exception e) {
entityManager.getTransaction().rollback();
throw new PersistenceException(e);
}
Это просто грубый пример, но он должен проиллюстрировать это.