我在Spring上的Web应用程序中使用Hibernate。我在控制器中的方法使用try catch块,如果一切正常,我设置重定向参数“success == true”,如果出错,我使用“error == true”。 有用。但有时在我的控制台中,hibernate会向我显示警告,例如:
2017-01-28 19:13:44.253 WARN 4532 --- [nio-8080-exec-8] o.hibernate.util.JDBCExceptionReporter : SQL Error: 1062, SQLState: 23000
2017-01-28 19:13:44.253 ERROR 4532 --- [nio-8080-exec-8] o.hibernate.util.JDBCExceptionReporter : Duplicate entry
我只想在try catch块中捕获这些警告,因为如果我尝试向DB添加新条目 - 在这种情况下 - 重复条目然后在try catch块中所有内容都被接受并且我获得了信息“操作成功”但它不是。 我试图捕获不同的异常,如SQLException,HibernateException,甚至一般 - 异常。但它不起作用。对于添加,更新,删除条目等操作,我使用'void'方法,因此我无法返回一些值。
是否可以从控制台捕获这些警告/错误以及如何?
@RequestMapping(value="/adduserdb", method=RequestMethod.POST)
public String addUserToDb(@ModelAttribute(value="userform") User user, RedirectAttributes redirectAttributes) {
try {
userService.createBasicUser(user);
redirectAttributes.addAttribute("success", true);
return "redirect:/admin/user/adduser";
} catch(Exception e) {
redirectAttributes.addAttribute("error", true);
return "redirect:/admin/user/adduser";
}
}
这是我的一个方法的示例,我如何做到这一点,但它不起作用。
答案 0 :(得分:0)
如果您不想要休眠警告,可以将休眠日志级别设置为info。
你的application.properties中的添加:
log4j.logger.org.hibernate=info
在xml中:
<logger name="org.hibernate">
<level value="info"/>
</logger>
答案 1 :(得分:0)
打印这些错误是hibernate的默认属性。如果您只想隐藏日志,则可以禁用以下包的日志。在春季启动,就像
logger.level.org.hibernate.util=OFF
但是不建议这样做,因为其他相关日志可能会被忽视。
在您的情况下,您可以在执行插入之前检查记录是否已存在,从而避免错误本身的需要。
boolean isUserExist = userService.isUserExist(user.getName());
if(!isUserExist){
userService.createBasicUser(user);
redirectAttributes.addAttribute("success", true)
else {
redirectAttributes.addAttribute("error", true);
return "redirect:/admin/user/adduser";
}
虽然可能在两个服务调用之间添加了另一个用户,但这可以作为特殊情况使用全局异常处理程序来处理,该处理程序将显示一般错误消息,因为这不太可能(取决于应用程序) )