全部好,
我正在尝试使用Hibernate保存名称,地址,电子邮件信息...有时候Hibernate会抛出异常,这会导致JBoss回滚整个事务!我不希望这种情况发生,如果在保存电子邮件时存在Hibernate异常......那么我只是希望电子邮件位不要回滚整个,名称,地址,电子邮件回滚 - 这就是JBoss的作用。我在保存操作中有一个try-catch块,即使抓住了异常,Jboss仍然会继续回滚。
有人对我如何实现这一点有任何建议吗?
非常感谢。
答案 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会抛出一个异常,并且可能在第一种情况下预先验证数据以防止它,这可能会解决实际的潜在问题,而不是我的解决方案,这只是它的一步。