在Hibernate异常之后控制Jboss回滚

时间:2009-06-11 18:33:26

标签: hibernate jboss transactions

全部好,

我正在尝试使用Hibernate保存名称,地址,电子邮件信息...有时候Hibernate会抛出异常,这会导致JBoss回滚整个事务!我不希望这种情况发生,如果在保存电子邮件时存在Hibernate异常......那么我只是希望电子邮件位不要回滚整个,名称,地址,电子邮件回滚 - 这就是JBoss的作用。我在保存操作中有一个try-catch块,即使抓住了异常,Jboss仍然会继续回滚。

有人对我如何实现这一点有任何建议吗?

非常感谢。

2 个答案:

答案 0 :(得分:1)

以上是一个很好的建议,但我还有一些补充:

如果你在JBoss中,你是直接使用Hibernate,还是使用JPA(EJB3.0)?如果您正在使用EJB,则可以在方法调用中使用@TransactionAttribute批注将嵌套事务用于无状态会话Bean。

如果您直接使用Hibernate,您应该考虑使用JBoss提供的抽象层(JPA)(假设您运行的是JBoss 4 +)

答案 1 :(得分:0)

你需要的是一个嵌套的事务,不幸的是hibernate不支持嵌套事务,所以我怕你的运气不好。您唯一真正的选择是在两个单独的事务中执行更新。

YourTransactionalService service = ;

service.updateNameAndAddress(details);

try{
    service.updateEmail(details);
}catch( HibernateException e){
    // could just ignore it?
}

你可能会看看为什么Hibernate会抛出一个异常,并且可能在第一种情况下预先验证数据以防止它,这可能会解决实际的潜在问题,而不是我的解决方案,这只是它的一步。