Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
Jpa 为什么在使用EclispseLink时更新后发现可重复读取_Jpa_Eclipselink - Fatal编程技术网

Jpa 为什么在使用EclispseLink时更新后发现可重复读取

Jpa 为什么在使用EclispseLink时更新后发现可重复读取,jpa,eclipselink,Jpa,Eclipselink,使用默认数据库隔离级别(read committed),当另一个事务具有写提交时,可以从该事务执行不可重复的读取。然而,当我尝试测试这种行为时。找到可重复读取的结果。以下是我使用的步骤: 开始事务T1 选择行T1(检索OldValue) 断点 使用NewValue T2修改行 再次选择行T1(检索OldValue) 此外,我尝试禁用JPA/EclipseLink缓存,但得到了相同的结果 <shared-cache-mode>NONE</shared-cache-mode>

使用默认数据库隔离级别(read committed),当另一个事务具有写提交时,可以从该事务执行不可重复的读取。然而,当我尝试测试这种行为时。找到可重复读取的结果。以下是我使用的步骤:

  • 开始事务T1
  • 选择行T1(检索OldValue)
  • 断点
  • 使用NewValue T2修改行
  • 再次选择行T1(检索OldValue)
  • 此外,我尝试禁用JPA/EclipseLink缓存,但得到了相同的结果

    <shared-cache-mode>NONE</shared-cache-mode>
    ...
    <property name="eclipselink.query-results-cache" value="false"/>
    
    无
    ...
    

    有人能解释为什么吗?

    当我在第一次选择后尝试使用entityManager.clear()时,它能够产生不可重复的读取。为什么它仍然被缓存?恐怕你把名字混在一起了。可重复阅读是另一种现象,但不是一种现象,因此无法观察到文件多次指出,四个隔离级别只定义了哪些现象不能发生,而不是哪些现象必须发生。如果您认为它可能发生,但无法观察到,那么这也可能是正确的行为。很抱歉,问题不清楚,请修改说明您是如何更改步骤4中的值的?也许你没有提交更新?另外:如果您不使用模糊处理层而手动执行,是否也会发生这种情况?
    显示默认事务隔离给您带来了什么?可能您的Postgres服务器配置为使用不同的隔离级别。该值已提交。如果我在步骤2中的第一次选择之后使用entityManager.clear(),步骤5中的第二次选择将显示NewValue。当我在第一次选择之后尝试使用entityManager.clear()时,它能够产生不可重复的读取。为什么它仍然被缓存?恐怕你把名字混在一起了。可重复阅读是另一种现象,但不是一种现象,因此无法观察到文件多次指出,四个隔离级别只定义了哪些现象不能发生,而不是哪些现象必须发生。如果您认为它可能发生,但无法观察到,那么这也可能是正确的行为。很抱歉,问题不清楚,请修改说明您是如何更改步骤4中的值的?也许你没有提交更新?另外:如果您不使用模糊处理层而手动执行,是否也会发生这种情况?
    显示默认事务隔离给您带来了什么?可能您的Postgres服务器配置为使用不同的隔离级别。该值已提交。如果在步骤2中的第一次选择之后使用entityManager.clear(),则步骤5中的第二次选择将显示NewValue。