Hibernate和EJB:如何正确使用@TransactionAttributevalue = TransactionAttributeType.REQUIRES_NEW?

问题描述

我有以下代码,希望在该方法中永久保留 Claims::with(array('customer'=>function($query){ $query->select('id','contr_nom'); }))->get(); 的所有{strong>全部或全部。

但是,它的行为是创建了一些entities而没有创建-即整个entities并未回滚。

为什么会这样?

注意-我正在将代码作为transaction服务器中的EAR文件运行

JBOSS EAP

解决方法

Hibernate有效的答案。

TransactionAttributeType.REQUIRES_NEW不支持。

很难在Java对象上实现回滚。想象一下以下情况:

  1. 开始交易
  2. 创建并保存对象
  3. 子交易开始
  4. 已修改对象
  5. 子交易回滚。

您希望对象处于子事务开始之前的状态,因此您需要跟踪有关对象在子事务中的修改以及回滚这些修改的能力的信息。

或者,您可以从数据库重新加载状态,但是您需要跟踪哪个对象属于哪个事务。

我认为开发人员只是认为这太费劲了。