Suchen nach einem HQL-Builder (Hibernate Query Language)

7

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 RoccaSerra 11.09.2008, 15:12
quelle

11 Antworten

4

@ 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 .

%Vor%

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.

    
sblundy 11.09.2008, 17:02
quelle
6

Funktioniert die Kriterien-API nicht für Sie? Es sieht fast genau so aus, wie du es verlangst.

    
sblundy 11.09.2008 15:20
quelle
6

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.

    
Timo Westkämper 11.01.2010 21:07
quelle
5

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%     
ebelanger 04.12.2011 02:21
quelle
4

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

    
Alex Argo 11.09.2008 15:27
quelle
2

@ Sébastien Rocca-Serra

%Vor%

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

%Vor%     
sblundy 11.09.2008 15:42
quelle
2

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%     
Marcio Aguiar 11.09.2008 17:32
quelle
2

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.

    
Josh 25.02.2009 15:15
quelle
2

Sehen Sie sich das Suchpaket an, das im Projekt hibernate-generic-dao verfügbar ist. Dies ist eine ziemlich gute HQL Builder-Implementierung.

    
Chuck Deal 02.12.2009 20:10
quelle
2

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:

%Vor%     
Guillaume 10.12.2009 10:38
quelle
0

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%     
tglman 09.07.2013 10:20
quelle

Tags und Links