JPA (Hibernate) XA数据源执行事务中的存储过程



我在使用XA事务的Sql Server 2005上使用JBoss 6, JPA (Hibernate)。我能够运行查询和存储过程,但我试图在它自己的事务中运行某个存储过程(有点)。这意味着如果存储过程失败或返回错误,则应该回滚存储过程所做的更改,而不回滚其他查询(如entityManager.persist()

)所做的更改。

我已经尝试了BEGIN TRANSACTION, ROLLBACK等…在存储过程本身中,但是我得到一个JDBC错误,该事务不存在。

我怎样才能做到这一点?在它自己的事务中运行存储过程?(不知道怎么做)

Thanks for the help

回答我自己的问题,这个执行存储过程的方法是EJB中的子方法,但它不是业务接口的一部分,显然在这种情况下没有创建新的事务(即使使用REQUIRES_NEW),如果我错了请纠正我。

我最终将该方法移动到不同的EJB中,并用注释来注释该方法@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)并通过

获取SessionContext
@Resource
protected SessionContext ctx;

和当我需要回滚存储过程的更改而不回滚外部事务更改时执行ctx.setRollbackOnly();

这对我来说很好,但如果我错了,请随时纠正我。

最新更新