在 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
.
创建它
在基于 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
.