使用 Hibernate JPA 和 Spring @Transactional
(使用 Atomikos JTA 实现)我的系统中有以下实体:
- 命令
- Orderline(保存对订单的引用)
- 顾客
addOrder
在一个带有注释的服务类方法中,@Transactional
我想在一个事务中执行以下步骤(它是一个原子功能块)。
- 坚持订单
- 坚持秩序
- 坚持客户
在第 1 步(保持订单),我希望 JPA 回滚任何Exception
.
在第 2 步(持久化订单线),我想忽略持久化订单线期间的任何错误。因此,如果我有 10 条订单线并且 1 条因任何原因(例如违反约束)失败,我想继续使用其他订单线。
在第 3 步中,如果Exception
我希望 JPA 回滚整个事务,那么在第 1 步和第 2 步中完成的所有事情也是如此。
到目前为止我遇到的问题:
- JPA 将事务标记为“仅回滚”,以防
Exception
. 因此,在此之后(和之前)的所有内容都将回滚,但我想忽略Exception
第 2 步。 flush()
JPA 仅在调用or之后才知道约束冲突commit()
,这通常是在@Transactional
方法完成之后。我需要在我的方法中知道它。- 试图以单独的
@Transactional
方法拆分每个步骤,但由于他们需要使用相同的方法,Transaction
这不会改变前两个问题。
最好的方法是什么?
更新
例如,我是否应该将所有验证都放在 Java 中并手动检查记录是否已经存在?