如何处理Hibernate异常?

时间:2017-08-04 09:55:21

标签: java spring hibernate

我使用Spring和Hibernate框架并尝试更新DB中不存在的对象(不存在的条目),但它返回错误HTTP Status 500

HTTP Status 500 - Request processing failed; nested exception is org.springframework.orm.hibernate4.HibernateOptimisticLockingFailureException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1; nested exception is org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1

这是我的服务,但它没有捕获异常

    @Override
    public ResponseEntity<?> update(CoverSheet coverSheet) {
        try {
            this.coverSheetDao.edit(coverSheet);                
            return CryptoUtils.generateSuccessResponseEntity(coverSheet);
        } catch (Exception e) {
            e.printStackTrace();                
            return CryptoUtils.generateFailureResponseEntity(ErrorCode.CODE_SQL_EXCEPTION, e.getMessage());
        } 
    }
你可以帮助我吗?非常感谢!

1 个答案:

答案 0 :(得分:0)

我修复了这个错误。实际更新查询在刷新时执行。不是在会话上调用update()时。在这种特殊情况下,刷新发生在提交包装对服务方法的调用的事务之前。 BTW,可以在堆栈跟踪中看到:

at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:485)

所以我在服务之外捕获异常(例如:控制器):

try {
        return contactService.update(contact);
    } catch (Exception e) {
        e.printStackTrace();
        return CryptoUtils.generateFailureResponseEntity(ErrorCode.CODE_SQL_EXCEPTION, e.getMessage());
    }