Hibernate从控制台记录为异常

时间:2017-01-28 18:20:39

标签: java spring hibernate

我在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";
        }
    }

这是我的一个方法的示例,我如何做到这一点,但它不起作用。

2 个答案:

答案 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";
}

虽然可能在两个服务调用之间添加了另一个用户,但这可以作为特殊情况使用全局异常处理程序来处理,该处理程序将显示一般错误消息,因为这不太可能(取决于应用程序) )