如何捕获org.springframework.dao.DataIntegrityViolationException:无法执行JDBC批量更新

时间:2015-09-07 15:53:14

标签: java spring hibernate jdbc

我试图在春天使用hibernate来做sql查询我能够成功执行查询但是如果用户给出具有主键约束的相同用户ID或者在int参数中给出字符串,我会收到一些错误我想捕获这些异常并发送用户自定义异常,如主键约束异常,NullValue异常等,就像那样

我获得的主键约束的

错误是:

org.springframework.dao.DataIntegrityViolationException: Could not execute JDBC batch update

有没有办法根据错误捕获异常,以便在该特定异常上我可以向用户发送我的自定义错误消息。现在我发送用户catched异常错误,但用户不知道错误是什么,所以我想发送自定义错误

有没有办法根据具体错误捕获异常

2 个答案:

答案 0 :(得分:1)

您可能希望查看Spring ExceptionTranslator,因为它允许您将SQLExceptions转换为DataAccessExceptions,包括您自己的自定义版本,这将允许您为用户生成包含所需消息的异常。在您的情况下,您可以扩展HibernateExceptionTranslator,以获得比默认Hibernate实现提供给您的更具体的异常。

答案 1 :(得分:0)

您获得的异常已由Spring ExceptionTranslator翻译,原始异常是依赖的Integrity或Constraint违例异常,它已被封装到一般的Spring Exception中。

也许您可以构建一个带有HashMap的自定义bean,其中spring转换的异常映射到您自己的消息。例如:

...
Map<Class<String, String> exMap = new HashMap<String, String>();
exMap.put("org.springframework.dao.DataIntegrityViolationException", "Clarifying message to user ...");
...
try{
   ...
}catch(Exception ex){
    String message = exMap.get(ex.getclass().getName());
    ...
}

希望它有所帮助。