Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将控制台中的日志作为异常进行休眠_Java_Spring_Hibernate - Fatal编程技术网

Java 将控制台中的日志作为异常进行休眠

Java 将控制台中的日志作为异常进行休眠,java,spring,hibernate,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 E

我在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块中,所有内容都被接受,并且我获得了信息“Operation Successfull”,但事实并非如此。 我试图捕获不同的异常,比如SQLException、HibernateeException,甚至是general-Exception。但它不起作用。对于像添加、更新、删除条目这样的操作,我使用“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";
        }
    }

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

如果不希望出现hibernate警告,可以将hibernate的日志级别设置为info

在application.properties中添加以下内容:

log4j.logger.org.hibernate=info
在xml its中:

<logger name="org.hibernate">
  <level value="info"/> 
</logger>

如果不需要hibernate警告,可以将hibernate的日志级别设置为info

在application.properties中添加以下内容:

log4j.logger.org.hibernate=info
在xml its中:

<logger name="org.hibernate">
  <level value="info"/> 
</logger>

打印这些错误是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";
}

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

打印这些错误是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";
}

虽然可能会在两个服务调用之间添加另一个用户,但这可以作为一种特殊情况使用全局异常处理程序进行处理,该处理程序将显示一条通用错误消息,因为这种可能性较小(取决于应用程序)

这是我想要的,但并不完全。在这种情况下,我必须检查数据库中是否存在用户或其他对象,这意味着数据库的下一个sql查询。Hibernate总是在出现问题时抛出HibernateException,即使在这种情况下,输入重复项也是如此。问题是我无法捕捉到这个异常。我的DAO方法使用:“抛出HibernateException”,但在控制器中,即使是一般的“exception”也无法捕获此异常。这是我真正的问题。您可以通过打印
Exception.getClass()
,找到异常的确切类别,然后修改代码以捕获它。但此异常将是实际异常的包装。。另外,通过使用try-catch,您在很大程度上依赖于spring的事务性(回滚能力),但这不是一个好的实践。在这种情况下,我必须检查数据库中是否存在用户或其他对象,这意味着数据库的下一个sql查询。Hibernate总是在出现问题时抛出HibernateException,即使在这种情况下,输入重复项也是如此。问题是我无法捕捉到这个异常。我的DAO方法使用:“抛出HibernateException”,但在控制器中,即使是一般的“exception”也无法捕获此异常。这是我真正的问题。您可以通过打印
Exception.getClass()
,找到异常的确切类别,然后修改代码以捕获它。但此异常将是实际异常的包装。。另外,通过使用try-catch,您在很大程度上依赖于spring的事务性(回滚能力),但这不是一个好的实践。您确定确实引发了异常吗?“抓不到”和“什么也抓不到”是有区别的。可能是userService处理的?您确定确实引发了异常吗?“抓不到”和“什么也抓不到”是有区别的。也许userService可以处理它?“如果我们将日志记录级别设置为INFO,那么应用程序可以记录范围为-INFO、WARN、ERROR和FATAL的消息。”——“如果我们将日志记录级别设置为INFO,那么应用程序可以记录范围为-INFO、WARN、ERROR和FATAL的消息。”-