【发布时间】:2011-12-14 23:01:33
【问题描述】:
我遇到了最奇怪的事情,我不知道为什么。描述这一点的最佳方式是提供一个简单的示例:
@Service
@Transactional
public class Foo{
public ModelAndView delete(@ModelAttribute("abc") Long id) {
ModelAndView mav = new ModelAndView();
try {
getDaoService().delete(id); //Calls Bar.delete()
} catch (final Exception e) {
// Add a custom error message to the mav for the user to see
mav.getModelMap().addAttribute(blah, blah);
}
return mav;
}
}
@Service
@Transactional
public class Bar {
public void delete(final E entity) throws HibernateException {
if (null != entity) {
try {
sessionFactory.getCurrentSession().delete(entity);
} finally {
sessionFactory.getCurrentSession().flush();
}
}
}
}
在这种特殊情况下,我试图删除一个违反约束的对象 (ORA-02292)。我希望删除因此而失败。当删除失败时,我希望向用户显示适当的自定义消息。
无法向用户显示自定义消息,调用失败并在屏幕上显示以下内容:
org.springframework.transaction.UnexpectedRollbackException:事务 回滚,因为它已被标记为仅回滚
当我使用调试器时,我可以看到错误被适当地捕获,并且 ModelAndView 对象中包含自定义消息。所以,我不知道为什么在捕获和处理后仍然抛出异常。有谁知道为什么会发生这种情况?
【问题讨论】: