0

我们有一个父子实体模型,其中包含以下内容:

    @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 会更好。

4

1 回答 1

2

否 - App Engine 不支持联接查询,因此您无法使用子实体的属性来查询父实体。(https://developers.google.com/appengine/docs/java/datastore/jdo/relationships#Owned_One_to_Many_Relationships)。
您可以查询嵌入式类的属性,因此您可以考虑这是否适合您的用例。

如果您的类别具有唯一名称,您可以考虑使用不同的设计,将类别名称用作类别实体键名称字符串。然后,您可以在每个 Area 实体中存储类别名称字符串列表(作为索引的多值属性)。
使用这样的设计,您将通过子键名列表而不是通过 JDO 对拥有关系的支持来管理父子关系。

于 2012-07-13T05:49:50.043 回答