在 appengine 数据存储上执行查询时,如何获取对实体的对象化引用 (Ref<T>) 对象?

How to get objectify reference (Ref<T>) object to entity while executing a query on appengine datastore?

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

问题是 在旧版本 (Objectify 4.0b2) 中,查询 returned 对数据库对象的引用。

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

这曾经是一个有效的代码,因为 ofy().load().type().id() 用于 return 数据库实体的引用。

将 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<> 对象的好方法,我们从数据库中获取对象吗?

谢谢 阿德哈尔

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

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

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

在不了解您的应用程序的情况下,很难提供很多建议。但是,如果您只需要 Ref,请从 Key.

创建它