【问题标题】:id() not working (not completely) in Objectifyid() 在 Objectify 中不起作用(不完全)
【发布时间】:2016-10-02 23:10:07
【问题描述】:

我的一个实体的 ID 声明如下:

@Id
private String                  oInstID;
public  String                  getInstID(){return oInstID;}
public void initID(){
    oInstID = OfyController.makeID(Partner.class, null);
}

请记住,我的其他实体也有相同的声明。

我在ofy.save()之后有如下测试语句:

Sticky persisted = OfyController.ofy().load().type(Sticky.class).first().now();
String id = persisted.getInstID();
Sticky queried = OfyController.ofy().load().type(Sticky.class).id(id).now();
Sticky queried2 = OfyController.ofy().load().entity(persisted).now();

持久化返回了实体

id返回实体的ID

查询的返回null...这是我的问题。

queried2 返回与 persisted

相同的实体

知道为什么 queried 返回 null 吗?

谢谢!

【问题讨论】:

  • 您是否在准确地呈现实体定义?如果您有 @Parent 字段,这将导致此行为。这段代码没有明显的问题,所以发布一个完整的例子来展示你的保存操作。

标签: google-app-engine objectify


【解决方案1】:

我之前使用 Objectify 的经验很少而且非常陈旧,但您所描述的内容与 eventual consistency 一致。 Storing Data with Objectify and Datastore 中有一些有用的信息。

【讨论】:

  • @Dave...我的场景与最终一致性有什么关系?仅供参考……上面的测试语句是用 JUnit 编写的,所以 EC 不应该是这里的一个因素。谢谢!
  • 如果您针对 dev_appserver 使用 JUnit,EC 是一个因素。 Dev_appserver 为您模拟最终的一致性。第三个声明等同于SELECT * FROM Sticky WHERE id=?,它绝对受 EC 约束。
  • 这是不正确的 - load().type(t).id(i) 与为 {t,i} 创建密钥并执行按密钥获取相同。这将是强烈一致的。不管是什么问题,都是另一回事。
猜你喜欢
  • 2023-04-07
  • 2021-05-01
  • 2014-12-27
  • 2012-10-04
  • 1970-01-01
  • 2016-11-07
  • 2014-12-18
  • 1970-01-01
  • 2018-09-21
相关资源
最近更新 更多