Использование Hibernate JPA и Spring @Transactional
(с реализацией Atomikos JTA) У меня есть следующие лица, в моей системе:Spring JPA @Transactional Atomic
- Заказать
- строки заказа (содержит ссылку на заказ)
- Заказчик
в методе класса Service addOrder
с аннотацией @Transactional
Я хочу, чтобы выполнить следующие шаги, в одном TRANSACTI on (это один атомный функциональный блок).
- Упорство ордена
- упорствуем OrderLines
- PERSIST Заказчик
На шаге 1 (сохраняющиеся орден) Я хочу JPA откатить на любом Exception
.
На шаге 2 (сохранение позиций заказа) Я хочу игнорировать любые ошибки во время сохранения строки заказа. Поэтому, если у меня есть 10 строк порядка и 1 не удается по какой-либо причине (например, ограничение ограничения), я хочу продолжить работу с остальными.
На шаге 3 В случае любого Exception
я хочу JPA откатить всю сделку, так и все, что было сделано на шаге 1 и 2.
Проблемы я столкнулся, до сих пор:
- JPA отмечает транзакцию как «откат только» в случае
Exception
. Так что все, после того, как (и раньше) это откат, но я хочу, чтобы игнорироватьException
на шаге 2. - JPA знает о нарушении ограничений после
flush()
илиcommit()
называется, которая, как правило, после того, как метод@Transactional
закончен , Мне нужно было бы знать это в моем методе. - Пробовал разбивать каждый шаг в отдельном методе
@Transactional
, но так как им нужно использовать тот жеTransaction
, это не изменит предыдущие две проблемы.
Каков наилучший подход для этого?
Update
Должен ли я поставить все проверки в Java и вручную проверить, если запись уже существует, например?
@Bhasit В этом случае я столкнулся с проблемой 2, упомянутой выше. Нарушение ограничения (сущность уже существует, например) может быть замечена только при совершении фиксации. Эта фиксация выполняется только в конце основной службы, поскольку это конец транзакции. –
Вы хотите игнорировать нарушения контртерминала? Кроме того, какой менеджер транзакций вы используете? –
В принципе, я хотел бы быть abled, чтобы игнорировать любое (Runtime) исключение, вызванное сохранением позиции заказа. Мы используем Atomicos. –