Вы не можете сделать ИЛИ в двух разных полях.Вот фрагмент из документов :
В строковом синтаксисе JDOQL вы можете разделить несколько фильтров с помощью ||(логическое «или») и && (логическое «и»), хотя имейте в виду, что ||может использоваться только тогда, когда все фильтры, которые он разделяет, имеют одинаковое имя поля.Другими словами, ||допустимо только в тех случаях, когда разделяемые фильтры могут быть объединены в один фильтр contains ():
// legal, all filters separated by || are on the same field
Query query = pm.newQuery(Employee.class,
"(lastName == 'Smith' || lastName == 'Jones')" +
" && firstName == 'Harold'");
// not legal, filters separated by || are on different fields
Query query = pm.newQuery(Employee.class,
"lastName == 'Smith' || firstName == 'Harold'");
Одним из способов решения этой проблемы может быть сохранение ваших a и b в списке.Если у вас есть список элементов с именем foo, вы можете выполнить запрос, где foo = ключевое слово, и, если какой-либо элемент в foo совпадает, вы получите этот объект обратно в свои результаты.Вы мало говорите о том, что такое a и b, поэтому я не знаю, сработает ли это для вас или нет :)
Обновление :
public class Example {
String firstName;
String lastName;
List<String> allNames;
public Example(String first, String last){
firstName = first;
lastName = last;
allNames = new ArrayList<String>();
allNames.add(first);
allNames.add(last);
}
}
С помощью чего-то подобного вы можете выполнить запрос, в котором «allNames == 'Smith' || allNames == 'Jones'".