Hibernate - verbinden Sie unbezogene Objekte

8

Ich habe eine Anforderung, bei der ich zwei nicht verwandte Objekte mithilfe von Hibernate HQL verknüpfen muss. Hier ist die Beispiel-POJO-Klasse

%Vor%

und

%Vor%

Nun möchte ich eine Abfrage durchführen wie Wählen Sie * aus Produkt p linken äußeren Join Item i auf p.product_id = i.item_id

Ich möchte ein mehrdimensionales Array als Ausgabe dieser Abfrage, so dass ich separate Exemplare von Produkt und Artikel haben kann, anstatt eines in einem anderen. Gibt es eine Möglichkeit, dies in Hibernate zu tun?

    
CuriousMind 26.12.2010, 12:19
quelle

4 Antworten

5

Es ist ungewöhnlich, eine Verknüpfung zwischen Objekten darzustellen, indem die ID des zugehörigen Objekts und nicht das zugehörige Objekt selbst gespeichert wird. Das Speichern des Objekts ist aussagekräftiger und typsicherer und muss keine Auswirkungen auf die Leistung haben, da Hibernate-Funktionen Lazy-Loading-Proxies enthalten.

Aber natürlich können Sie Dinge verbinden, die in der Mapping-Datei nicht als Assoziationen zugeordnet sind. Zitieren des Hibernate-Referenzhandbuchs :

  

Mehrere Klassen können erscheinen, resultierend   in einem kartesischen Produkt oder "Kreuz"   beitreten.

%Vor%

und

  

Abfragen können mehrere Objekte zurückgeben   und / oder Eigenschaften als ein Array des Typs   Objekt []:

%Vor%      

Oder als Liste:

%Vor%      

Oder - angenommen, dass die Klasse Familie   hat einen passenden Konstruktor - als   aktuelles typsicheres Java-Objekt:

%Vor%      

Sie können ausgewählte Aliase zuweisen   Ausdrücke verwenden als:

%Vor%      

Dies ist am nützlichsten, wenn es zusammen verwendet wird   mit neuer Karte auswählen:

%Vor%      

Diese Abfrage gibt eine Map aus Aliasen zurück   zu ausgewählten Werten.

Kombiniert man dies mit einer einfachen where-Klausel, erhalten wir:

%Vor%

Bearbeiten : Ich habe übersehen, dass Sie eine äußere Verknüpfung möchten. In diesem Fall kenne ich keine andere Möglichkeit, als die Zuordnung zuzuordnen, damit Sie einen normalen Join durchführen können. Beachten Sie, dass dies keine bestimmte Form des Abfrageergebnisses erfordert, d. H. Sie können immer noch Folgendes tun:

%Vor%     
meriton 27.12.2010 02:23
quelle
3

Es gibt eine Problemumgehung, um über IDs in hql hier beizutreten.

Ich empfehle jedoch, hier eine native SQL-Abfrage zu verwenden.

    
zinan.yumak 26.12.2010 19:44
quelle
0

Sie können subselect

verwenden %Vor%     
Arthur Ronald 27.12.2010 03:41
quelle
0

Versuchen Sie subselect in select-Klausel:

%Vor%     
vorelj 12.04.2016 11:06
quelle

Tags und Links