2012-07-12 28 views
0

我們有一個父 - 它包含以下子實體模型:有沒有一種方法可以根據JDO(DataNucleus)中的子實體屬性進行排序?

@PersistenceCapable(detachable = "true") 
    public class Area implements Serializable { 
     @PrimaryKey 
     private String name; 

     @Persistent(mappedBy = "area") 
     @Element(dependent = "true") 
     private List<Category> categories; 
    } 


    @PersistenceCapable(detachable = "true") 
    public class Category implements Serializable { 

     @PrimaryKey 
     @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
     @Extension(vendorName="datanucleus", key="gae.encoded-pk", value="true") 
     private String key; 

     @Persistent 
     private Area area; 
    } 

當我們檢索所有與他們的分類沿領域,我們可以通過排序類別名稱的結果?

我看到JDO Query有一個setOrdering方法,雖然它似乎應用於您查詢的實體的屬性而不是它的子實體。

我們目前使用TreeMap進行排序,但使用JDO/GSQL會更好。

回答

2

否 - App Engine不支持連接查詢,因此您無法使用子實體的屬性查詢父實體。 (https://developers.google.com/appengine/docs/java/datastore/jdo/relationships#Owned_One_to_Many_Relationships)。
您可以查詢embedded class的屬性,以便您可以考慮這是否適合您的用例。

如果您的類別具有唯一名稱,您可以考慮使用類別名稱作爲類別實體鍵名稱字符串的不同設計。然後,您可以在每個Area實體中存儲一個類別名稱字符串列表(作爲索引的多值屬性)。
有了這樣的設計,您將通過子鍵名稱列表來管理父子關係,而不是通過JDO對擁有關係的支持。

+0

謝謝艾米,那是我關心的問題 – Uri 2012-07-13 06:34:59

相關問題