什么是“事务内部的读取操作不能允许故障转移”?

时间:2010-06-13 05:36:38

标签: java google-app-engine transactions

2 个答案:

答案 0 :(得分:1)

看起来你要求在事务中使用对此的新支持进行故障转移读取。正如错误消息所解释的那样,这是不可能的,因为为了成为事务性的,它必须始终读取最新的数据。您需要为事务内的操作禁用故障转移读取。

答案 1 :(得分:1)

首先非常感谢@ Nick的回答。在这里,我以一种更直接的方式澄清答案,以解决我的问题,以防其他人遇到同样的问题在这里寻求帮助。

似乎最终的一致性,您无法在事务中进行查询,至少是按键查询,否则将引发我的问题中描述的异常消息。在Google App Engine的related official documentation中,它没有直接指出,但是有一些这样的句子:

  

所有更新操作(创建,更新,   删除)发生在主存储中。一个   强烈一致地读取实体   可能仍然是一个操作或   交易背后,因为一个   事务是在它之后应用的   提交。

最终的一致性可能需要从主存储位置以外的存储位置读取,并且可能与事务一致性发生冲突,因此不允许在我看到的事务中读取事件一致性。

默认情况下使用强一致性而不进行任何配置。对于我自己的问题,我刚刚删除了persistence.xml(JPA)中的以下行:

<property name="datanucleus.appengine.datastoreReadConsistency" value="EVENTUAL" />

再次感谢,尼克!