我对appEnginy和objectify很新。但是我需要从db中获取一行以从中获取一些值。我尝试按ofy().load().type(Branch.class).filter("parent_branch_id", 0).first()
获取元素,但结果为FirstRef(null)
。但是,当我运行以下循环时:
for(Branch b : ofy().load().type(Branch.class).list()) {
System.out.println(b.id +". "+b.tree_label+" - parent is " +b.parent_branch_id);
};
我做错了什么?
[编辑] Ofcourse Branch是一个数据库实体,如果重要的话,parent_branch_id的类型为long。
答案 0 :(得分:1)
如果您的请求需要Branch
,我认为您错过了.now()
:
Branch branch = ofy().load().type(Branch.class).filter("parent_branch_id", 0).first().now();
答案 1 :(得分:0)
听起来您的@Index
财产上没有parent_branch_id
注释。当您执行ofy().load().type(Branch.class).list()
时,Objectify实际上是按类进行批处理(比如使用低级API执行Query("Branch")
),因此它不需要属性索引。只要您添加filter()
,它就会使用查询。
假设您使用的是Objectify 4,默认情况下不会对属性编制索引。您可以通过向类添加@Index
注释来索引实体中的所有属性。 annotation reference提供了有用的信息。
答案 2 :(得分:0)
LoadResult<Thing> th = ofy.load().type(Thing.class).filter("foo", foo).first();
Thing th = ofy.load().type(Thing.class).filter("foo", foo).first().now();
所以你需要确保成员“foo”有@Index并使用now()来获取第一个元素。如果没有找到元素,这将返回null。
在您的情况下可能"parent_branch_id"
很长,在这种情况下,值必须为0L而不是0。