中使用Hibernate JPA和Spring @Transactional
(与Atomikos公司JTA实现)我在我的系统下面的实体:春天JPA @Transactional原子
- 订购
- 订单行(持有参考排序)
- 客户
在具有@Transactional
欲执行以下步骤注解服务类方法addOrder
,在一个transacti (这是一个原子功能块)。
- 坚持订单
- 坚持的Orderlines
- 保留客户
在步骤1(持续次序)我想JPA回滚任何Exception
。
在步骤2(坚持Orderlines)我想在持续订单行期间忽略任何错误。所以如果我有10个命令行并且1个因任何原因失败(例如违反约束),我想继续处理其他命令。
在步骤3在任何Exception
我想JPA回滚整个事务,因此也已在步骤1和2
我遇到了问题所做的一切的情况下,到目前为止:
- 如果是
Exception
,JPA会将该事务标记为“仅回滚”。所以后(之前)这一切都被回滚,但我想忽略Exception
在步骤2 - JPA之后才知道的约束违反
flush()
或commit()
被调用,这通常是@Transactional
方法完成后。我需要知道它在我的方法中。 - 试图在单独的
@Transactional
方法中拆分每一步,但由于它们需要使用相同的Transaction
,所以这不会改变前面的两个问题。
这是最好的方法是什么?
更新
我应该把所有的验证Java和人工检查的记录已经存在,例如?
@Bhasit在这种情况下我遇到上述问题2。违反约束(例如实体已存在)可能只有在完成提交时才会被注意到。此提交仅在主服务结束时完成,因为这是交易的结束。 –
你想忽略condtraint违规?另外,您正在使用哪个交易管理器? –
基本上我想能够忽略由持久化Orderline引起的任何(运行时)异常。我们正在使用Atomikos。 –