Почему ошибка «Объединения поддерживаются только тогда, когда все фильтры являются« равными »фильтрами». - PullRequest
1 голос
/ 21 июля 2011

Я не уверен, что я здесь не так? Он жалуется: «Объединения поддерживаются только тогда, когда все фильтры являются« равными »». когда запрос выполнен. Как я могу обойти это?

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 голосов
/ 22 июля 2011

Хранилище данных App Engine не является реляционным и не поддерживает объединения, что вы делаете неявным образом, используя поле в ссылочной модели. Вместо этого вам следует выбрать объект или объекты с указанным номером телефона и использовать ключи этих объектов для фильтрации набора результатов, исключая подразумеваемое объединение.

...