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

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

Post by Guest »

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

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post