Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.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 如何处理spring包装的hibernate异常?_Java_Spring_Hibernate_Spring Mvc - Fatal编程技术网

Java 如何处理spring包装的hibernate异常?

Java 如何处理spring包装的hibernate异常?,java,spring,hibernate,spring-mvc,Java,Spring,Hibernate,Spring Mvc,spring模板将hibernate异常包装为DataAccessExceptions。因此,试图直接捕获hibernate异常是行不通的。像这样 try{ springdao.update(row) } catch(HibernateException e) { //won't do } 问题: 捕获DataAccessException包装的hibernate异常的最佳实践是什么?只是捕获数据访问例外 即使spring已经包装了这个异常,当它被抛出时。它显示为原始的hib

spring模板将hibernate异常包装为DataAccessExceptions。因此,试图直接捕获hibernate异常是行不通的。像这样

try{
    springdao.update(row)
}
catch(HibernateException e) {
    //won't do 
}
问题:

捕获DataAccessException包装的hibernate异常的最佳实践是什么?只是捕获数据访问例外

即使spring已经包装了这个异常,当它被抛出时。它显示为原始的hibernate异常。像下面,为什么

无法将数据库状态与会话同步 org.hibernate.StaleObjectStateException:行已由更新或删除 另一个事务或未保存的值映射不正确:


我认为处理DataAccessException比处理HibernateeException或SQLException更好。因为它用更广义的方式来描述这个问题。如果您以后更改了ORM/数据库,它将以相同的方式处理与数据库相关的异常处理。它还包含与Hibernate相同的异常。即使在非SQL数据库的情况下,也会引发相同的异常

Spring文档说:

此异常层次结构旨在让用户代码查找并处理异常 在不了解系统详细信息的情况下遇到的错误类型 正在使用的特定数据访问API,例如JDBC。因此,有可能 在不知道JDBC正在运行的情况下对乐观锁定失败作出反应 正在使用中


但如果您想区分不同的异常,比如连接异常和陈旧对象异常,该怎么办呢。同样对于问题2,为什么它在日志中仍然显示为原始的hibernate异常?检查完整的异常层次结构:@zinking,正如我已经说过的,DataAccessException是由许多不同的JPA API引发的更一般化的异常形式。因此,这只是一种分类,不同的ORM/JPA API抛出的不同类型的异常将如何映射到一个通用的表单中,但包含实际发起人抛出的不同数据/消息。如果以后您想更改数据库/ORM技术,您不需要更改已经存在的异常层次结构。