Wir verwenden jakarta.jakartaee-api als Abhängigkeit in unserem Projekt, damit wir die CriteriaBuilder/CriteriaQuery-Funktionen nutzen können. Ein Array von Prädikaten wird verwendet, um mehrere Bedingungen zu erstellen. Eines der Prädikate wird zum Erstellen einer „IN“-Klausel verwendet.
Code: Select all
jakarta.platform
jakarta.jakartaee-api
11.0.0-M4
provided
Code: Select all
...
predicates = new Predicate[] {
...
criteriaBuilder.in(root.get("zone").in(zoneList))
...
}
criteriaQuery.where(predicates);
Die Liste „zoneList“ enthält zwei Elemente.
Der generierte SQL-Teil für die „IN“-Klausel enthält IN (NULL) , und daher werden keine Zeilen in der Datenbank gefunden.
Code: Select all
AND (
(
t0.zone IN (?, ?)
) IN (NULL)
)
Warum fügt Jakarta IN (NULL) in die generierte SQL ein?
Hier ist der vollständige Java-Code
Code: Select all
public List report() {
EntityManager em = getEntityManager();
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery criteriaQuery = cb.createQuery(DBEntity.class);
Root root = criteriaQuery.from(DBEntity.class);
Predicate[] predicates = new Predicate[] {
cb.in(root.get("zone").in(Arrays.asList("Zone 1")))
};
criteriaQuery.where(predicates);
criteriaQuery.select(root);
TypedQuery query = em.createQuery(criteriaQuery);
return query.getResultList();
}
Wir verwenden jakarta.jakartaee-api als Abhängigkeit in unserem Projekt, damit wir die CriteriaBuilder/CriteriaQuery-Funktionen nutzen können. Ein Array von Prädikaten wird verwendet, um mehrere Bedingungen zu erstellen. Eines der Prädikate wird zum Erstellen einer „IN“-Klausel verwendet.
[code]
jakarta.platform
jakarta.jakartaee-api
11.0.0-M4
provided
[/code]
[code]...
predicates = new Predicate[] {
...
criteriaBuilder.in(root.get("zone").in(zoneList))
...
}
criteriaQuery.where(predicates);
[/code]
Die Liste „zoneList“ enthält zwei Elemente.
Der generierte SQL-Teil für die „IN“-Klausel enthält IN (NULL) , und daher werden keine Zeilen in der Datenbank gefunden.
[code]AND (
(
t0.zone IN (?, ?)
) IN (NULL)
)
[/code]
Warum fügt Jakarta IN (NULL) in die generierte SQL ein?
Hier ist der vollständige Java-Code
[code]public List report() {
EntityManager em = getEntityManager();
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery criteriaQuery = cb.createQuery(DBEntity.class);
Root root = criteriaQuery.from(DBEntity.class);
Predicate[] predicates = new Predicate[] {
cb.in(root.get("zone").in(Arrays.asList("Zone 1")))
};
criteriaQuery.where(predicates);
criteriaQuery.select(root);
TypedQuery query = em.createQuery(criteriaQuery);
return query.getResultList();
}
[/code]