2013-10-10 83 views
0

我對appEnginy和objectify非常熟悉。不過,我需要從數據庫中獲取單行來獲得一些值。我試圖通過ofy().load().type(Branch.class).filter("parent_branch_id", 0).first()獲取元素,但結果是FirstRef(null)。但是,當我運行以下循環:GoogleAppEngine - 使用一些自定義過濾器進行查詢

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

你跟你的循環得到什麼結果呢? – CMDej

+0

結果僅僅是根據system.out.println格式化的分支(實際上是樹節點)列表:[long] [node_name] - parent是[long] – Moby04

+0

您是否擁有id爲0的父母?它是什麼樣的ID? Objecitfy的自動ID?因爲在那種情況下,我認爲你沒有辦法得到一個0 ID ... – CMDej

回答

1

如果你想有一個Branch爲您請求的結果,我想你錯過了.now()
Branch branch = ofy().load().type(Branch.class).filter("parent_branch_id", 0).first().now();

+0

但是,當我現在添加時,Netbeans強調它是一個錯誤... – Moby04

+0

你從Netbeans得到什麼錯誤? – CMDej

+0

'找不到符號 符號:now() location:class Ref ' – Moby04

0

這聽起來像你沒有對你的parent_branch_id財產@Index註解。當你做ofy().load().type(Branch.class).list()時,Objectify有效地按批處理進行批處理(比如使用低級API執行Query("Branch")),因此它不需要屬性索引。只要您添加filter(),它就會使用查詢。

假設您使用的是Objectify 4,默認情況下屬性不會被編入索引。您可以通過將@Index註釋添加到課程中,爲實體中的所有屬性編制索引。 annotation reference提供了有用的信息。從Objectify API reference

+0

沒有幫助,但謝謝。 – Moby04

+0

@ Moby04如果不是'first()'你使用'list()',而是保留'filter()',你會得到預期的結果嗎? – tx802

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(); 

所以,你需要確保成員「富」有@index現在使用()獲取第一個元素。如果沒有找到元素,這將返回null。

可能"parent_branch_id"你的情況是一個長期的,在這種情況下,值必須0L而不是0