我使用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());
}
}
你可以帮助我吗?非常感谢!
答案 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());
}