Google Datastore for Java 文档摘录(二)

The following features of the JDO interface are not supported by the App Engine implementation:

  • contains() syntax for query filters on Collection fields. You can test that a multi-valued property (a Collection field) has a value using an equality filter: collection == "value"

下面通过%appengine-java-sdk-1.2.2%\demos\jdoexamples中的“Friend”例子来学习使用 collection == "value"

 

appengine-java-sdk-1.2.1发布时,由于没有http://127.0.0.1:8080/_ah/admin,“Friend”例子不好理解。1.2.2版本新增了Datastore Viewer,便于观察已保存的实体。

 

对于POJO Friend,可以通俗地理解为:一个人的姓、名,及其朋友集合。如果为A添加朋友B,那么B的朋友集合中也有A。如果为A添加朋友C,那么C的朋友集合中也有A。B和C不一定是朋友。无论为A添加多少朋友,Datastore中,姓=A的姓,且名=A的名的实体只有一个。形如:“A的姓 A的名 [B, C, ...]”。(其Datastore Viewer效果见附件,将Barney Rubble理解为A)

 

当查询A的所有的朋友时,使用了collection == "value",代码如下:

  public static List<Friend> getFriendsOf(String lastName, String firstName) {
    PersistenceManager pm = PMF.get().getPersistenceManager();
    
    Query query = pm.newQuery(Friend.class);
    String myKey = KeyFactory.keyToString(getKeyForName(lastName, firstName));
    query.declareParameters("String myKey");
    query.setFilter("friends == myKey");
    query.setOrdering("lastName ASC, firstName ASC");
    List<Friend> friends = (List<Friend>) query.execute(myKey);
    
    return friends;
  }

 lastName和firstName为A的姓和名,将其转换为Datastore平台特有的“myKey”(关于Key,就不详述了)。注意代码query.setFilter("friends == myKey"),friends的类型为Collection<String>,但在设置过滤条件时却是用了符号“==”!

你可能感兴趣的:(java,C++,c,Google,C#)