Vous ne pouvez pas faire une ou sur deux champs différents. Voici un extrait de la docs:
Dans la syntaxe de chaîne JDOQL, vous pouvez plusieurs filtres séparés avec || (logique "ou") et & & (logique "et"), mais gardez à l'esprit que || peut seulement être utilisé lorsque les filtres sépare tous ont le même champ nom. En d'autres termes, || est que juridique dans des situations où les filtres il sépare peuvent être combinés en un seul contient() Filtre:
// 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'");
Une façon de contourner cela pourrait être pour stocker votre a et b dans une liste. Si vous avez une liste d'éléments appelés foo, vous pouvez faire une requête où foo = mot-clé, et si un élément de foo correspond, vous obtiendrez cet objet dans vos résultats. Vous ne dites pas beaucoup sur ce a et b sont, donc je ne sais pas si cela fonctionnera pour vous ou pas :)
Mise à jour:
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);
}
}
Avec quelque chose comme ça, vous pourrait alors faire une requête où "allNames == 'Smith' || allNames == 'Jones'".
Salut merci pour votre commentaire. Je ne suis pas sûr de suivre la liste, a et b sont des chaînes et le mot clé que je veux correspondre. Je veux faire exactement comme l'exemple illégal, est-ce possible avec votre solution et à quoi cela ressemblerait-il? –
J'ai ajouté un exemple à ma réponse. –