Java 如果应用程序srv隔离级别设置为“读取已提交”,是否会发生OptimisticLockException?

Java 如果应用程序srv隔离级别设置为“读取已提交”,是否会发生OptimisticLockException?,java,orm,jpa,openjpa,isolation-level,Java,Orm,Jpa,Openjpa,Isolation Level,我正在使用WebSphereApplicationServer7.0.0.0.9;OpenJPA 1.2.3-SNAPSHOT'。 我已经设置了jdbc数据源WebSpheredFaultIsolationLevel=2(读取已提交)的属性。 我有这个问题,因为我的理解是,如果有多个线程竞相提交同一行,就会发生OptimaticClockException。 但我认为,如果隔离级别appserver设置为readcommitted,这种情况就永远不会发生 这是我得到的一个例外 <openj

我正在使用WebSphereApplicationServer7.0.0.0.9;OpenJPA 1.2.3-SNAPSHOT'。 我已经设置了jdbc数据源WebSpheredFaultIsolationLevel=2(读取已提交)的属性。 我有这个问题,因为我的理解是,如果有多个线程竞相提交同一行,就会发生OptimaticClockException。 但我认为,如果隔离级别appserver设置为readcommitted,这种情况就永远不会发生

这是我得到的一个例外

<openjpa-1.2.3-SNAPSHOT-r422266:907835 fatal store error> org.apache.openjpa.persistence.OptimisticLockException: An optimistic lock violation was detected when flushing object instance 
org.apache.openjpa.persistence.OptimisticLockException:刷新对象实例时检测到乐观锁冲突
我有这个问题,因为我的理解是,如果多个线程竞相提交同一行,则会发生
OptimisticLockException

是的,如果实体的
Version
属性在提交时比读取时更高(即已被另一个事务修改),则将抛出
OptimisticLockException
。如下图所示(借用自):

但我认为,如果隔离级别appserver设置为readcommitted,这种情况就永远不会发生

为什么??使用隔离级别时,可能会发生以下情况:

  • 这不会影响数据在内存中的表示(在上面的示例中为e1)
  • 大多数情况下,您不会读取数据
    • 即使您这样做(并执行不可重复的读取),在提交更改之前,实体仍可能被另一个线程修改
  • 总之,READ COMMITTED不会阻止
    OptimisticLockException

    我有这个问题,因为我的理解是,如果多个线程竞相提交同一行,则会发生
    OptimisticLockException

    是的,如果实体的
    Version
    属性在提交时比读取时更高(即已被另一个事务修改),则将抛出
    OptimisticLockException
    。如下图所示(借用自):

    但我认为,如果隔离级别appserver设置为readcommitted,这种情况就永远不会发生

    为什么??使用隔离级别时,可能会发生以下情况:

  • 这不会影响数据在内存中的表示(在上面的示例中为e1)
  • 大多数情况下,您不会读取数据
    • 即使您这样做(并执行不可重复的读取),在提交更改之前,实体仍可能被另一个线程修改
  • 总之,READ COMMITTED不会阻止
    OptimisticLockException