首页 > 解决方案 > 如何获得客观化参考(参考) 在对 appengine 数据存储区执行查询时对象到实体?

问题描述

在基于 Appengine Java 的应用程序中升级 Objectify 时,我遇到了一个问题,这是一个解决方案,我试图解决这个问题,但不确定它有多好?

问题是在旧版本(Objectify 4.0b2)中,查询返回了对 DB 对象的引用。

Ref<EntityDO> refEntity = ofy().load().type(EntityDO.class).id(entityId);

这曾经是一个有效的代码,因为 ofy().load().type().id() 用于返回对 DB 实体的引用。

将 Objectify 升级到更高版本后,这已更改为

LoadResult<EntityDO> entityDO = ofy().load().type(EntityDO.class).id(entityId);

现在我使用这段代码将 LoadResult<> 对象转换为 Ref<> 对象。

  public static <T> Ref<T> getRef(LoadResult<T> loadResult) {
    if (loadResult != null) {
      T obj = loadResult.now();
      if (obj != null) {
        return Ref.create(obj);
      }
    }
    return null;
  }

有了这个,我就可以成功获得 Ref<> 对象。我关心的是这是一个创建 Ref<> 对象的好方法,我们从数据库中获取对象?

谢谢阿德哈尔

标签: google-cloud-datastoreobjectify

解决方案


这有点奇怪。你可以这样称呼它,它是等价的:

Ref.create(Key.create(EntityDO.class, entityId))

...但我猜这在语义上不是你所期望的?老实说,我不记得 4.0b2 做了什么(7 年前),但在某些时候,ObjectifyRef从一个持有对实体的直接对象引用的对象变成了一个Key具有查找能力的持有者当前会话中的值。

如果不了解您的应用程序的更多信息,就很难提供太多建议。但是,如果您只需要一个Ref,请从Key.


推荐阅读