Ich habe eine komplexe Abfrage über 7 Tabellen und möchte wissen, wie ich sie in Hibernate implementieren kann.
Mein aktueller Versuch besteht darin, die Abfrage mithilfe von session.createSQLQuery zu erstellen, und ich würde das Ergebnis einer bestimmten Entität zuordnen.
Ich bin nicht sicher, wie ich das machen soll, denn in der Vergangenheit habe ich nur mit einer Tabelle zu einer Entität gearbeitet. Wo müsste ich angeben, dass ich eine komplexe Abfrage verwenden möchte, die mehrere Tabellen umfassen kann? Geht das nur in meinem Code? Meine hbm.xml-Datei? Ich kann an nichts anderes denken als an meinen jetzigen Versuch.
Hier ist ein Beispiel meiner Abfrage:
%Vor% Zum Ausführen dieser Abfrage benötigen Sie kein SQL. HQL geht es gut. Und eine solche Abfrage gibt eine List<Object[]>
zurück, wobei jede Object[]
eine Zeile der Ergebnismenge enthält. Sie finden also die Kunden-ID bei Index 0, die Karte bei Index 1 usw. Sie müssen nur die Zeilen durchlaufen und bei jeder Iteration eine Instanz Ihres Lightweight-Objekts erstellen.
Siehe Ссылка
Es gibt zwei Möglichkeiten, dies zu tun.
1. Sie erhalten ein Listenobjekt-Array.
%Vor%Hier repräsentiert ein Arrayelement eine Zeile Ihrer Abfrage.
2. Sie können eine Ruhezustandsfunktion verwenden ResultTransformer - Erstellen Sie eine einfache Klasse für die Ausgabe Ihrer Abfrage. - Erstellen Sie einen ResultTransformer.
Beispiel
%Vor%- Setzen Sie den Transformator auf die Abfrage.
%Vor%Endlich konnte ich mit diesem Code gelöst werden:
%Vor%Ich habe gerade den "As" -Teil auf Select und den addScalar + setResultTransformer
hinzugefügtSoweit ich das sehen kann, ist dies eine Verknüpfung von sieben Tabellen. Wenn Sie Hibernate verwenden, ordnen Sie jede dieser Tabellen Entitäten zu und verwenden dann @JoinColumn, um jede ihrer Abhängigkeiten zuzuordnen. Dies ist die Art von SQL-Abfrage, die durch den Ruhezustand verhindert wird.