2009-06-11 85 views
0

HI毕竟,控制Jboss的回滚休眠例外

我想保存的姓名,地址,电子邮件信息使用Hibernate ......有时有一个由Hibernate抛出一个异常,这将导致JBoss的回滚完整的交易!我不希望发生这种情况,如果在保存电子邮件时发生Hibernate异常......那么我只想让电子邮件位回滚而不是整个名称,地址和电子邮件回滚 - 这正是JBoss所做的。我在保存操作中有一个try-catch块,即使异常被捕获,Jboss仍然继续回滚。

有没有人有任何建议,我可以如何实现这一点?

非常感谢。

回答

1

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

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

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

0

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

YourTransactionalService service = ; 

service.updateNameAndAddress(details); 

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

你可能什么看就是为什么Hibernate抛出一个异常,也许验证前期,以防止它在第一种情况下的数据,这可能会在这里讨论实际的基础问题,而不是我的解决方案,它只是一方的步骤它。