0

我对 appEnginey 和 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);
};

我做错了什么?

[编辑] 当然,Branch 是一个数据库实体,如果它重要的话 parent_branch_id 是 long 类型。

4

3 回答 3

1

如果您想要 aBranch作为您的请求的结果,我认为您会错过 a .now()
Branch branch = ofy().load().type(Branch.class).filter("parent_branch_id", 0).first().now();

于 2013-10-10T08:57:23.207 回答
0

Objectify API 参考中的示例:

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"是 long,在这种情况下,值必须是 0L 而不是 0。

于 2013-10-10T23:48:37.313 回答
0

听起来您的财产上没有@Index注释。parent_branch_id当您这样做时ofy().load().type(Branch.class).list(),Objectify 会有效地按种类进行批量获取(就像Query("Branch")使用低级 API 一样),因此它不需要属性索引。只要添加 a filter(),它就会使用查询。

假设您使用的是 Objectify 4,默认情况下不为属性编制索引。您可以通过向@Index类添加注释来索引实体中的所有属性。注释参考提供了有用的信息。

于 2013-10-10T13:57:57.227 回答