JPQL-äquivalent von SQL-Abfragen mit unions und Konstanten auswählen
Ich geschrieben habe eine SQL-Abfrage, die im Grunde wählt aus einer Anzahl von Tabellen, um zu bestimmen, welche Zeilen, die erstellt wurden, seit einem bestimmten Datum. Mein SQL sieht ungefähr so aus:
SELECT widget_type FROM(
SELECT 'A' as widget_type
FROM widget_a
WHERE creation_timestamp > :cutoff
UNION
SELECT 'B' as widget_type
FROM widget_b
WHERE creation_timestamp > :cutoff
) types
GROUP BY widget_type
HAVING count(*)>0
Die gut funktioniert in SQL, aber vor kurzem fand ich, dass, während die JPA verwenden dürfen Gewerkschaften zu führen "Tabelle pro Klasse" polymorphe Abfragen, JPQL unterstützt nicht die Gewerkschaften in Abfragen. Damit lässt mich Fragen, ob der PPV hat eine alternative, die ich verwenden könnte, um das gleiche erreichen.
In der Realität, ich wäre Abfragen gegen ein Dutzend Tische, die nicht nur zwei, so möchte ich es vermeiden, separate Abfragen. Ich möchte auch vermeiden, eine native SQL-Abfrage für die Portabilität Gründen.
In der Frage, die ich im Zusammenhang mit oben, es wurde gefragt, ob die Entitäten, die Karte zu widget_a und widget_b sind Teil der gleichen vererbungsbaums. Ja, das sind Sie. Wenn ich allerdings die gewählten von Ihrer Basis-Klasse, ich glaube nicht, würde ich eine Weise haben, durch unterschiedliche string-Konstanten für die verschiedenen untergeordneten Entitäten, würde ich? Wenn ich konnte wählen Sie ein Element aus der Klasse von Namen anstelle eines Strings, die ich mag dienen meinem Zweck zu. Aber ich weiß nicht, ob das möglich ist. Gedanken?
Eigentlich mache ich die Vererbung verwenden, wenn ich will, die Abfrage der Objekte selbst. Und es funktioniert Super. Aber wie die Frage sagt, was ich tun möchte, hier ist die Abfrage für die entity-TYPEN verwendet wurden (erstellt), vor kurzem nicht die Abfrage der Entitäten selbst. Wenn Sie eine Möglichkeit haben, dies zu tun, ich würde lieben, zu wissen,
InformationsquelleAutor spaaarky21 | 2013-02-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich ein wenig mehr der Suche-und fand eine (scheinbar obskuren) - feature von JPA, dient meine Zwecke perfekt. Was ich gefunden habe ist, dass JPA 2 hat eine
type
Schlüsselwort, das erlaubt Ihnen die Begrenzung polymorphe Abfragen zu einer bestimmten Unterklasse, etwa so:Ich habe festgestellt, dass PPV (oder zumindest Hibernate als JPA-Implementierung) ermöglicht die Verwendung
type
nicht nur Zwang, sondern auch in select-Listen. Das ist ungefähr das, was meine Abfrage landete auf der Suche wie:Diese Abfrage gibt eine Liste von
Class
Objekte. Meine ursprüngliche Abfrage war die Auswahl string-Literale, weil das ist nah an dem, was ich getan haben könnte in SQL. Die AuswahlClass
ist eigentlich vorzuziehen, in meinem Fall. Aber wenn ich es täte, lieber wählen Sie eine Konstante basiert auf einem entity-Typ, das ist das genaue Szenario, das Der Oracle-Dokumentation verwendet, um zu illustrierencase
Aussagen:InformationsquelleAutor spaaarky21
Einigen JPA-Providern unterstützen der UNION,
http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/JPQL#UNION
aber deine Abfrage scheint sehr Komplex ist, und nicht Objekt-orientiert, also über eine native SQL-Abfrage würde wohl am besten sein.
type
Stichwort, die ist perfekt für Abfragen wie in meiner Frage. Werfen Sie einen Blick auf meine Antwort, wenn Sie neugierig auf die details.InformationsquelleAutor James