AppEngine JDO-QL: проблема с несколькими AND и OR в запросе - PullRequest
0 голосов
/ 16 мая 2010

Я работаю с App Engine (Java / JDO) и пытаюсь выполнить некоторые запросы со списками.

Итак, у меня есть следующий класс:

@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable="true")
public class MyEntity
{
  @PrimaryKey
  @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  Key key;

  @Persistent
  List<String> tags = new ArrayList<String>();

  @Persistent
  String otherVar;
}

У меня работает следующий JDO-QL:

( tags.contains('a')  ||  tags.contains('b')  ||  tags.contains('c')  ||  tags.contains('d') ) && otherVar > 'a' && otherVar < 'z'

Похоже, что возвращаются все результаты, в которых теги содержат одну или несколько строк с одним или несколькими заданными значениями и вместе с поиском неравенства в otherVar

Но следующее не работает:

(tags.contains('a')  || tags.contains('_a'))  &&  (tags.contains('b')  || tags.contains('_b')) && otherVar > 'a' && otherVar < 'z'

В этом случае мне нужны все попадания, где есть хотя бы один a (или a или _a) и один b (либо b или _b) вместе с поиском неравенства, как и раньше.

Но проблема в том, что я также получаю результаты, где есть a, но нет b, а это не то, чего я хочу.

Возможно, я упустил что-то очевидное, или сделал ошибку кодирования, или, возможно, есть ограничение на то, как вы можете написать эти запросы в appengine, поэтому любые советы или помощь будут очень полезны.

С уважением Клас

1 Ответ

0 голосов
/ 23 мая 2010

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

Если вам нужен такой запрос, подумайте о реструктуризации вашей модели данных.

...