google-cloud-datastore - 如何获得客观化参考(参考) 在对 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<> 对象的好方法,我们从数据库中获取对象?
谢谢阿德哈尔
解决方案
这有点奇怪。你可以这样称呼它,它是等价的:
Ref.create(Key.create(EntityDO.class, entityId))
...但我猜这在语义上不是你所期望的?老实说,我不记得 4.0b2 做了什么(7 年前),但在某些时候,ObjectifyRef
从一个持有对实体的直接对象引用的对象变成了一个Key
具有查找能力的持有者当前会话中的值。
如果不了解您的应用程序的更多信息,就很难提供太多建议。但是,如果您只需要一个Ref
,请从Key
.
推荐阅读
- go - 从类型返回的类型的隐式接口
- python - 最后一个元素没有在 for 循环中运行
- python - 解析 Mix 数据日志文件
- puppet - Puppet 独立错误 - 未知资源类型:'testme_service::install'
- oim - DBUM 与 DBAT OIM 连接器用例
- spring - Spring Boot 2.4.x - @RefreshScope 不工作
- android - ResourcesCompat.getColor(...) 返回 -1
- apache-spark - 检查两个数据集数组的交集
- capistrano - Capistrano 中的“set”关键字的目的是什么?(已编辑)
- flutter - 在颤振中使用预输入包时的问题