ObjectOptimisticLockingFailureException
由 使用Spring ORM
,通常是 的一部分Spring Data JPA
,表示 OptimisticLocking 失败,因此某些更改了数据,这些数据将在当前事务中提交,在其他事务中。
在调查了 Spring ORM 类之后,我发现了一个可能是你答案的类。请参阅JpaOptimisticLockingFailureException
。此异常的代码非常简单:
public class JpaOptimisticLockingFailureException extends ObjectOptimisticLockingFailureException {
public JpaOptimisticLockingFailureException(OptimisticLockException ex) {
super(ex.getMessage(), ex);
}
}
请注意,它扩展ObjectOptimisticLockingFailureException
并接受javax.persistence.OptimisticLockException
并调用超级构造器,消息来自OptimisticLockException
. 这就是您看到此类异常消息的原因。
要回答您的问题:
OptimisticLockException 和 ObjectOptimisticLockingFailureException 之间有什么区别?
OptimisticLockException
特定于 JPA,它是许多供应商(如 Hibernate)正在实现的接口,并且ObjectOptimisticLockingFailureException
特定于在Spring ORM
内部使用 JPA/Hibernate。
我怎么知道哪个异常会抛出应用程序?
如果你正在使用Spring ORM
你应该捕获ObjectOptimisticLockingFailureException
异常,因为这是一个超类,HibernateOptimisticLockingFailureException
所以JpaOptimisticLockingFailureException
这个是最通用的,它的实现可能会包装其他具体的异常(如上所示)。还要记住,这些异常是RuntimeException
这样的,所以如果你想基于它们执行一些处理,你应该明确地捕获它们。