Ich suche nach einem Builder für HQL in Java. Ich möchte Dinge wie:
loswerden %Vor%Ich hätte lieber etwas wie:
%Vor%Ich habe ein bisschen gegoogelt, und ich konnte keins finden.
Ich schrieb eine schnelle & amp; dumb HqlBuilder
, die momentan meinen Bedürfnissen entspricht, aber ich würde gerne eine finden, die mehr Benutzer und Tests hat als ich alleine.
Hinweis: Ich möchte in der Lage sein, Dinge wie diese und mehr zu tun, was ich mit der Kriterien-API nicht getan habe:
%Vor% ie. Wählen Sie alle Aktien aus, deren Eigenschaft someValue
auf einen beliebigen Bonus aus der Bonus-Tabelle zeigt.
Danke!
@ Sébastien Rocca-Serra
>
Jetzt bekommen wir einen konkreten Ort. Die Art von Join, die Sie versuchen, ist über die Kriterien-API nicht wirklich möglich, aber eine Unterabfrage sollte dasselbe bewirken. Zuerst erstellen Sie ein DetachedCriteria
für die Bonus-Tabelle und dann den IN
-Operator für someValue
.
Dies entspricht
%Vor% Der einzige Nachteil wäre, wenn Sie Verweise auf verschiedene Tabellen in someValue
haben und Ihre IDs nicht in allen Tabellen eindeutig sind. Aber Ihre Abfrage würde unter dem gleichen Fehler leiden.
Funktioniert die Kriterien-API nicht für Sie? Es sieht fast genau so aus, wie du es verlangst.
Für einen typsicheren Ansatz zu Ihrem Problem sollten Sie Querydsl in Betracht ziehen.
Die Beispielabfrage wird
%Vor%Querydsl verwendet APT für die Codegenerierung wie JPA2 und unterstützt JPA / Hibernate-, JDO-, SQL- und Java-Sammlungen.
Ich bin der Betreuer von Querydsl, also ist diese Antwort voreingenommen.
Für eine andere typsichere Abfrage dsl empfehle ich Ссылка . Die Bibliothek ist noch jung, aber sie bietet Typensicherheit, indem sie die Klassen Ihrer Entität direkt verwendet. Dies bedeutet frühe Compilerfehler, wenn die Abfrage vor dem Refactoring oder Redesign nicht mehr gilt.
Ich habe Ihnen auch ein Beispiel gegeben. Ich denke aus Ihren Beiträgen, dass Sie versucht haben, eine Unterabfrage zu machen, also habe ich das Beispiel darauf aufgebaut:
%Vor%Offenbar möchten Sie die in Hibernate integrierte Kriterienabfrage-API verwenden. Um Ihre obige Abfrage durchzuführen, würde es so aussehen:
%Vor%Wenn Sie noch keinen Zugriff auf die Hibernate-Sitzung haben, können Sie 'DetachedCriteria' wie folgt verwenden:
%Vor%Wenn Sie alle Aktien erhalten möchten, die einen Bonus mit einer bestimmten ID haben, können Sie Folgendes tun:
%Vor%Weitere Informationen finden Sie Kriterienabfragen aus den Hibernate-Dokumenten
Das ist nur ein Beitritt. Hibernate macht es automatisch, wenn und wenn Sie die Zuordnung zwischen Stock
und Bonus
setup haben und wenn bonus
eine Eigenschaft von Stock
ist. Criteria.list()
gibt Stock
Objekte zurück und Sie rufen einfach stock.getBonus()
auf.
Beachten Sie, wenn Sie etwas wie
tun möchten %Vor% Sie müssen Criteria.createAlias()
. Es wäre etwas wie
Die Kriterien-API bietet nicht alle Funktionen, die in HQL verfügbar sind. Beispielsweise können Sie nicht mehr als eine Verknüpfung über dieselbe Spalte ausführen.
Warum benutzt du nicht NAMED QUERIES ? Das Aussehen viel sauberer:
%Vor%Ich habe eine GPL-Lösung für OMERO geschrieben, die Sie ganz einfach für Ihre Situation erstellen können.
Verwendung:
%Vor%Es funktioniert als eine Zustandsmaschine "Wählen- & gt; von- & gt; Join- & gt; wo- & quot; Reihenfolge" usw. und hält mit optionalen Parametern Schritt. Es gab mehrere Abfragen, die die Kriterien-API nicht ausführen konnte (siehe HHH-879 ), also in Am Ende war es einfacher, diese kleine Klasse zum Wrappen von StringBuilder zu schreiben. (Hinweis: Es gibt ein Ticket HHH-2407 , das einen Hibernate-Zweig beschreibt, der die beiden zusammenführen soll. Danach wäre es wahrscheinlich sinnvoll, die Criteria API erneut zu besuchen.
Sehen Sie sich das Suchpaket an, das im Projekt hibernate-generic-dao verfügbar ist. Dies ist eine ziemlich gute HQL Builder-Implementierung.
Ich weiß, dass dieser Thread ziemlich alt ist, aber ich habe auch nach einem HqlBuilder gesucht. Und ich fand das " Bildschirmschoner "Projekt
Es ist kein Windows-Bildschirmschoner, es ist ein
"Labs Information Management System (LIMS) für High-Throughput-Screening (HTS) -Anlagen, die kleine Moleküle und RNAi-Bildschirme ausführen. "
Es enthält einen HQLBuilder, der ziemlich gut aussieht.
Hier ist eine Beispielliste der verfügbaren Methoden:
Jetzt gibt es auch die standardmäßige JPA Type Safe Abfrage und einen weniger standardmäßigen aber auch guten < a href="https://www.objectquery.org/"> Objektabfrage
Beispiele:
JPA Type Safe
%Vor%Objektabfrage
%Vor%