Wie Sie richtig feststellen, ob ein "existiert" JPA Criteria-Query-Klausel zurückgegeben wahr oder falsch?

Ich weiß nicht, wie führen Sie eine JPA-criteria-Abfrage zurückgibt, die mit einer booleschen Ausgang.

Ziel ist ein Kriterien-Abfrage, die so aussieht wie diese beim Rendern in Oracle:

select 1 from dual where exists ( ... );

Den where exists (...) Teil I, durchgeführt mit einer Unterabfrage. Ich habe Mühe mit der externen Abfrage.

Der praktische nutzen dieser ist, um zu bestimmen, ob diese Unterabfrage in der exists - Klausel gibt true oder false.

Dies ist, was ich geschrieben habe:

CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();

CriteriaQuery<Object> query = criteriaBuilder.createQuery();
query.from(Boolean.class);
query.select(criteriaBuilder.literal(true));

Subquery<Location> subquery = query.subquery(Location.class);
Root<Location> subRootEntity = subquery.from(Location.class);
subquery.select(subRootEntity);

Path<?> attributePath = subRootEntity.get("State");
Predicate predicate = criteriaBuilder.equal(attributePath, criteriaBuilder.literal("TX"));
subquery.where(predicate);
query.where(criteriaBuilder.exists(subquery));

TypedQuery<Object> typedQuery = em.createQuery(query);


Die Letzte Zeile gibt eine Fehlermeldung, die besagt, dass "Boolean ist eine Entität". Ich denke mein Problem ist nicht zu wissen, wie um den Ausdruck des "von" - Teil der Abfrage, so dass das Ergebnis Ausgänge 1 oder 0/wahr oder falsch - nicht ein Unternehmen.

Ich weiß, konnte ich wieder jede Einheit und prüfen Sie dann, ob die Liste der Ergebnisse hat die Größe von 1.

Bin ich Fragen, wie man ein Boolesches Ergebnis, beide zu vermeiden, die unnötige Aufgabe zum abrufen der Spalten und auch zu lernen, wie es zu tun.

Ist dies überhaupt möglich?

Dank!
Eduardo

  • Nein, Sie können nicht direkt zu tun, aber ein gemeinsamer Weg ist zu prüfen, für die Anzahl der Ergebnismenge ich.e wenn die Zählung größer als null ist, dann true, sonst false.
InformationsquelleAutor Edy Bourne | 2011-07-18
Schreibe einen Kommentar