Gibt es eine Möglichkeit, eine eindeutige Abfrage in HQL zu erstellen? Entweder mit dem Schlüsselwort "different" oder einer anderen Methode. Ich bin nicht sicher, ob different ein gültiges Schlüsselwerk für HQL ist, aber ich suche nach dem HQL-Äquivalent des SQL-Schlüsselworts "different".
99
Es ist erwähnenswert, dass das
distinct
Schlüsselwort in HQL nicht direkt demdistinct
Schlüsselwort in SQL zugeordnet ist.Wenn Sie das
distinct
Schlüsselwort in HQL verwenden, verwendet Hibernate manchmal dasdistinct
SQL-Schlüsselwort. In einigen Situationen wird jedoch ein Ergebnistransformator verwendet, um eindeutige Ergebnisse zu erzielen. Zum Beispiel, wenn Sie einen äußeren Join wie folgt verwenden:In diesem Fall ist es nicht möglich, Duplikate auf SQL-Ebene herauszufiltern. Daher verwendet Hibernate a
ResultTransformer
, um Duplikate zu filtern, nachdem die SQL-Abfrage ausgeführt wurde.quelle
Mach das nächste Mal so etwas
quelle
Sie können auch verwenden
Criteria.DISTINCT_ROOT_ENTITY
mit Hibernate HQL-Abfragen verwenden.Beispiel:
quelle
Ich hatte einige Probleme mit Ergebnis-Transformatoren in Kombination mit HQL-Abfragen. Als ich es versuchte
es hat nicht funktioniert. Ich musste manuell so transformieren:
Mit Criteria funktionierten API-Transformatoren einwandfrei.
quelle
Meine Hauptabfrage sah im Modell folgendermaßen aus:
Und ich bekam immer noch nicht das, was ich als "eindeutige" Ergebnisse betrachtete. Sie wurden nur anhand einer Primärschlüsselkombination in der Tabelle unterschieden.
Also
DaoImpl
fügte ich eine einzeilige Änderung hinzu und bekam die "eindeutige" Rendite, die ich wollte. Ein Beispiel wäre, anstatt 00 viermal zu sehen, sehe ich es jetzt nur einmal. Hier ist der Code, den ich hinzugefügt habeDaoImpl
:Ich hoffe das hat geholfen! Auch dies funktioniert möglicherweise nur, wenn Sie Codierungspraktiken befolgen, die den Projekttyp Service, Dao und Modell implementieren.
quelle
Angenommen, Sie haben eine Kundenentität, die der Tabelle CUSTOMER_INFORMATION zugeordnet ist, und möchten eine Liste mit eindeutigen Vornamen des Kunden abrufen. Sie können das folgende Snippet verwenden, um dasselbe zu erhalten.
Ich hoffe, es hilft. Hier verwenden wir also group by, anstatt ein bestimmtes Schlüsselwort zu verwenden.
Auch zuvor war es schwierig, ein bestimmtes Schlüsselwort zu verwenden, wenn ich es auf mehrere Spalten anwenden möchte. Zum Beispiel möchte ich eine Liste mit unterschiedlichen Vornamen, Nachnamen und Gruppierungen erhalten, die einfach funktionieren. Ich hatte in diesem Fall Schwierigkeiten, verschiedene zu verwenden.
quelle
Ich habe eine Antwort für Hibernate Query Language erhalten, um eindeutige Felder zu verwenden. Sie können * SELECT DISTINCT (TO_CITY) FROM FLIGHT_ROUTE * verwenden. Wenn Sie eine SQL- Abfrage verwenden, wird die Zeichenfolgenliste zurückgegeben. Sie können den Rückgabewert nicht nach Entitätsklasse verwenden. Die Antwort zur Lösung dieser Art von Problem ist die Verwendung von HQL mit SQL .
Aus SQL Abfrageanweisung wurde DISTINCT ROUTE_ID abgerufen und als Liste eingegeben. Und die IN-Abfrage filtert die unterschiedliche TO_CITY von IN (Liste).
Der Rückgabetyp ist der Entity Bean-Typ. So können Sie es in AJAX wie AutoComplement .
Möge alles in Ordnung sein
quelle
Sie können das eindeutige Schlüsselwort in Ihrem Kriterien-Builder wie folgt eingeben.
Und erstellen Sie den Feldkonstruktor in Ihrer Modellklasse.
quelle
Wenn Sie ein neues Schlüsselwort für ein benutzerdefiniertes DTO in Ihrer select-Anweisung verwenden müssen und unterschiedliche Elemente benötigen , verwenden Sie new außerhalb von new wie folgt:
quelle
Sie können einfach GROUP BY anstelle von Distinct hinzufügen
quelle