Jpa QueryBuilder Plusieurs expressions dans la clause where ne fonctionne pas
Je rencontre un problème avec la création de requêtes avec javax.la persistance.les critères.CriteriaBuilder. Je suis à l'aide de EclipseLink 2.1 et d'une base de données Oracle 10g. Lors de la construction d'une requête avec plusieurs restrictions qu'il utilise uniquement la première restriction, pas deux.
Voici mon code:
CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<Assignment> query = cb.createQuery(Assignment.class);
Root<Assignment> assignment = query.from(Assignment.class);
query.where(
cb.equal(assignment.get("request"), request),
cb.isNull(assignment.get("endDate")));
return getEm().createQuery(query).getResultList();
La requête produit est:
SELECT ASSX_ID, END_DATE, BEGIN_DATE, COMMENTS,
ASSX_OER_ASSIGNED_TO_ID, OER_OER_ID_ASSIGNED_BY,
ASSX_RQST_ID
FROM TARTS.ASSIGNMENT_XREF
WHERE (ASSX_RQST_ID = ?)
Il semble bien, à l'exception de la clause where. Je suis dans l'attente d':
SELECT ASSX_ID, END_DATE, BEGIN_DATE, COMMENTS,
ASSX_OER_ASSIGNED_TO_ID, OER_OER_ID_ASSIGNED_BY,
ASSX_RQST_ID FROM TARTS.ASSIGNMENT_XREF
WHERE (ASSX_RQST_ID = ? AND BEGIN_DATE IS NOT NULL)
Ce n'est pas grave si j'utilise la cb.et(arg1, arg2) ou pas aussi. Suis-je en train de faire quelque chose de mal? Toute aide sera appréciée.
Votre cb.isNull devrait être isNotNull. Avez-vous essayer d'ajouter plus de restrictions et/ou tenté de définir explicitement votre collaboration?
OriginalL'auteur Miller | 2011-07-04
Vous devez vous connecter pour publier un commentaire.
Votre requête est parfaitement ok. Comme vous l'avez mentionné,
CriteriaQuery.where(Predicate... restrictions)
utilise déjà la conjonction de prédicats donc il n'y a pas besoin d'utiliser la cb.et().Les seules choses que je pouvais imaginer:
endDate
ne peut jamais être nulle?OriginalL'auteur Robin