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



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

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

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

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

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

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

现在,我使用此代码将LoadResult<gt;对象引用<gt;对象

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<gt;对象成功。我在这里担心的是,这是一个很好的方法,在这里创建Ref<gt;对象,我们从DB中获取对象?

谢谢Aadhaar

这有点奇怪。你可以称之为

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

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

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

最新更新