Warum fügt jakarta.jakartaee-api „IN (NULL)“ im generierten SQL für eine Prädikat-„in-Klausel“ hinzu?

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Warum fügt jakarta.jakartaee-api „IN (NULL)“ im generierten SQL für eine Prädikat-„in-Klausel“ hinzu?

by Guest » 11 Jan 2025, 11:02

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();
}

Top