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
Jakarta ee JPA到底什么时候执行提交?_Jakarta Ee_Jpa_Glassfish - Fatal编程技术网

Jakarta ee JPA到底什么时候执行提交?

Jakarta ee JPA到底什么时候执行提交?,jakarta-ee,jpa,glassfish,Jakarta Ee,Jpa,Glassfish,我们正在使用一个带有TopLink和Oracle数据库的集群Glassfish 2.x。 JTA是持久化单元的指定事务类型,我们使用默认缓存 现在我们看到了一些我不太理解的行为:在GF节点1上执行实体更新,5秒钟后,在节点2上执行相同实体的另一个更新。然而,当查看数据库时,似乎更新应用的顺序错误。这可能吗?根据我的理解,应该是在每个WS方法结束后,对数据库执行提交。因此,在5秒的延迟时间内,这两个操作不可能混在一起 更新在同一列上,并且仅在该列上,如果这很重要的话。因此,即使客户机在第二次调用期

我们正在使用一个带有TopLink和Oracle数据库的集群Glassfish 2.x。 JTA是持久化单元的指定事务类型,我们使用默认缓存

现在我们看到了一些我不太理解的行为:在GF节点1上执行实体更新,5秒钟后,在节点2上执行相同实体的另一个更新。然而,当查看数据库时,似乎更新应用的顺序错误。这可能吗?根据我的理解,应该是在每个WS方法结束后,对数据库执行提交。因此,在5秒的延迟时间内,这两个操作不可能混在一起

更新在同一列上,并且仅在该列上,如果这很重要的话。因此,即使客户机在第二次调用期间确实看到了第一次更新的更改,这也不重要,因为他只是使用实体的主键和新列值来调用WS方法。在该方法中,获取实体,应用新列值并调用entityManager.merge()。所以我不怀疑缓存在这里是个问题

两个WS-method调用/更新均未引发异常。我无法检查数据库日志,因为它超出了我的控制范围。这种行为偶尔发生一次。
有人知道我们正在经历的行为的原因吗?当提交真正被执行时,是否有文档记录?谢谢

一个问题:在事务中,您首先通过其主键获取实体,然后更新列,然后在此实体上调用merge?如果是,请检查合并是否必要:它只更新一个独立的实体,并且在托管的对象上被忽略(例外合并将被级联)。这可能有助于检测竞争条件。