为什么错误“仅当所有过滤器都是'等于'过滤器时才支持连接。”

时间:2011-07-21 09:58:15

标签: google-app-engine google-cloud-datastore jdo jdoql

我不确定我在这里做错了什么?它抱怨“仅当所有过滤器都是'等于'过滤器时才支持联接。”执行查询时。我怎么能解决这个问题?

Query query = pm.newQuery(ItemInfo.class);

if (lastSyncDate != null) {
    query.declareVariables("DeviceInfo deviceInfo");
    query.setFilter("this.toDevices.contains(deviceInfo) && " +
    "deviceInfo.phoneNumber == numberParam && createdDate > lastSyncDateParam");
    query.declareParameters("String numberParam, java.util.Date lastSyncDateParam");
    map.put("lastSyncDateParam", lastSyncDate);
} else {
    query.declareVariables("DeviceInfo deviceInfo");
    query.setFilter("this.toDevices.contains(deviceInfo) && deviceInfo.phoneNumber == numberParam");

    query.declareParameters("String numberParam");
}
map.put("numberParam", "123456");
query.setOrdering("createdDate desc");

@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable = "true")
public class ItemInfo {

   @PrimaryKey
   @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
   private Long id;

   @Persistent
   private String number;

   @Persistent
   private List<DeviceInfo> toDevices;
}

1 个答案:

答案 0 :(得分:0)

App Engine的数据存储区不是关系型的,并且不支持通过使用引用模型上的字段隐式执行的连接。相反,您应该使用给定的电话号码获取一个或多个实体,并使用这些实体的键来过滤结果数据集,从而消除隐含的连接。