我正在使用Hibernate和Spring,而且我目前仍然坚持使用我认为非常容易修复的东西。我有一个类似的服务方法:
@Transactional
public void deleteObject(ObjectClass object)
{
this.objectClassDAO.delete(object);
}
当用户尝试删除与另一个实体相关的对象时,我需要显示友好消息。我遇到的问题是在调用commit()之前抛出ConstraintViolationException,它在我的服务方法范围之外运行。有没有办法让spring在发生特殊异常时调用一些中间代码,以便我可以设置正确的错误消息?
我一直在谷歌搜索超过一个小时而没有运气。我发现的方法似乎至少有点相关,看起来有点矫枉过正,就像它们在应用程序级别运行一样。在方法级别提交后是否有一种简单的方法来拦截异常?
答案 0 :(得分:2)
您可能正在使用FlushMode.AUTO
,并且在事务结束时抛出异常(在Spring创建的服务的代理中)。您可以在Session.flush()
方法中明确调用objectClassDAO.delete()
。您通常不希望这样做,但在这种情况下,它将强制与基础持久性同步,如果存在约束违规,则在objectClassDAO.delete
返回之前将抛出异常。这可能是最后的手段。