Spring:在提交时捕获ConstraintViolationException

时间:2012-02-24 23:39:49

标签: java hibernate spring transactional

我正在使用Hibernate和Spring,而且我目前仍然坚持使用我认为非常容易修复的东西。我有一个类似的服务方法:

@Transactional
public void deleteObject(ObjectClass object)
{
    this.objectClassDAO.delete(object);
}

当用户尝试删除与另一个实体相关的对象时,我需要显示友好消息。我遇到的问题是在调用commit()之前抛出ConstraintViolationException,它在我的服务方法范围之外运行。有没有办法让spring在发生特殊异常时调用一些中间代码,以便我可以设置正确的错误消息?

我一直在谷歌搜索超过一个小时而没有运气。我发现的方法似乎至少有点相关,看起来有点矫枉过正,就像它们在应用程序级别运行一样。在方法级别提交后是否有一种简单的方法来拦截异常?

1 个答案:

答案 0 :(得分:2)

您可能正在使用FlushMode.AUTO,并且在事务结束时抛出异常(在Spring创建的服务的代理中)。您可以在Session.flush()方法中明确调用objectClassDAO.delete()。您通常不希望这样做,但在这种情况下,它将强制与基础持久性同步,如果存在约束违规,则在objectClassDAO.delete返回之前将抛出异常。这可能是最后的手段。