JDOQL Любой способ избежать нескольких вызовов .contains () в запросе при поиске присутствия одного или нескольких элементов в переменной List члена? - PullRequest
0 голосов
/ 07 апреля 2010

Вопрос в значительной степени говорит сам за себя.

Если у меня есть класс Class A

public class A {
    ...
    private List<String> keys;
    ...
}

И я хочу выбрать все A экземпляров из хранилища данных, которые имеют по крайней мереодин из списка ключей, есть ли лучший способ сделать это, чем это:

query = pm.newQuery(A.class);
query.setFilter("keys.contains(:key1) || keys.contains(:key2) || keys.contains(:key3)");
List<A> results = (List<A>)query.execute(key1, key2, key3);

Это еще не реализовано, поэтому я открыт для радикальных предложений.

Ответы [ 2 ]

1 голос
/ 01 июля 2011

Теперь он реализован в gae, поэтому ваш код работает отлично. Вот еще один пример:

Query query = pm.newQuery(Book.class);
query.setFilter("_AuthorKeys.contains(:key1) || _AuthorKeys.contains(:key2)");
Key key1 = KeyFactory.stringToKey("xxxxxxxxxxx");
Key key2 = KeyFactory.stringToKey("yyyyyyyyyyy");
List<Book> books = (List<Book>) query.execute(key1, key2);

или

Query query = pm.newQuery(Book.class);
query.setFilter("_AuthorKeys.contains(:keys)");
List<Key> keys = new LinkedList();
keys.add(KeyFactory.stringToKey("xxxxxx"));
keys.add(KeyFactory.stringToKey("yyyyyy"));
List<Book> books = (List<Book>) query.execute(keys);
1 голос
/ 07 апреля 2010

«ВЫБРАТЬ ИЗ» + A.class.getName () + «ГДЕ keys.contains (var) && (var ==: key1 || var ==: key2 || var ==: key3) ПЕРЕМЕННЫЕ java.lang .String var "

Или, по крайней мере, это то, что мы использовали бы с другими хранилищами данных; кто-нибудь догадывается, если Google реализовал это.

...