Je rencontre un problème avec la création de requêtes avec javax.persistence.criteria.CriteriaBuilder. J'utilise EclipseLink 2.1 et une base de données Oracle 10g. Lors de la construction d'une requête avec plusieurs restrictions, elle n'utilisera que la première restriction, pas les deux.Jpa QueryBuilder Expressions multiples dans where clause ne fonctionnant pas
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 est producted:
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 bon, sauf pour la clause where. J'attends:
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)
Peu importe si j'utilise cb.and (arg1, arg2) ou non également. Est-ce que je fais quelque chose de mal? Toute aide serait appréciée.
Votre cb.isNull devrait être isNotNull. Avez-vous essayé d'ajouter plus de restrictions et/ou essayé de définir explicitement votre conjonction? – jelle