EntityNotFoundException的可能原因

时间:2014-09-11 00:21:55

标签: java google-app-engine

Google AppEngine中的get()在什么情况下会抛出EntityNotFoundException

如果在请求时数据存储区中不存在请求的密钥,是否真的会发生,或者由于调用期间的其他问题也可能发生,例如a超时?

换句话说,如果我开始新的交易并且该交易中的get()会引发EntityNotFoundException,我是否可以 100%确定{{1}在同一个交易中,从不覆盖某些现有的条目,put()不知何故错过了?

添加一些代码:

get()

此代码永远是否会意外覆盖现有实体,因为某些机制导致EntityNotFoundException 其他而该实体确实不存在?

1 个答案:

答案 0 :(得分:1)

当您进行交易时,您的整个实体组将被交易冻结,直到您提交它为止。因此,在您的情况下,如果实体组被锁定,则没有人真正有机会推动"他自己的实体介于你的获取和放置之间。

我个人可以看到的唯一问题" entityNotFound"与最终的一致性有关。例如,如果实例已创建但尚未完全一致,则某些get()查询可以返回" EntityNotFound"。我会使用强一致性查询(如get_by_id)来确保您的数据存储是一致的。

您唯一的时间应该收到" EntityNotFound"错误来自一个没有被捕获的实体。在这种情况下,要么实体不存在,要么一致性不强。使用强一致性查询(祖先查询或get_by_id)将解决该问题。

查看this可能会帮助您重组模型:)