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>,但在设置过滤条件时却是用了符号“==”!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值