Wie verlasse ich Join-Tabellen in unidirektionaler Many-to-One in Hibernate?

8

Ich bin Schweinchen-rückwärts von Wie Tabellen in einer unidirektionalen Viele-zu-eins-Bedingung zu verbinden? .

Wenn Sie zwei Klassen haben:

%Vor%

B - & gt; A ist eine Beziehung von vielen zu eins. Ich verstehe, dass ich eine Sammlung von Bs zu A hinzufügen könnte, aber ich will diese Zuordnung nicht.

Meine eigentliche Frage lautet also: Gibt es eine HQL- oder Criteria-Methode zum Erstellen der SQL-Abfrage?

%Vor%

Dadurch werden alle A-Datensätze mit einem kartesischen Produkt jedes B-Datensatzes abgerufen, der A referenziert und A-Datensätze enthält, auf die kein B verweist.

Wenn Sie Folgendes verwenden:

%Vor%

Dann ist es ein innerer Join und Sie erhalten keine A-Datensätze, die kein B enthalten.

Ich habe keinen guten Weg gefunden, dies ohne zwei Abfragen zu tun, also wäre nichts weniger als das großartig.

Danke.

    
jbarz 04.03.2010, 23:18
quelle

2 Antworten

2

Ich habe ein Beispiel mit dem gemacht, was Sie gepostet haben, und ich denke, das könnte funktionieren:

select a,b from B as b left outer join b.parent as a in HQL.

Ich muss jedoch einen "Kriterien" Weg finden, dies zu tun.

    
Luciano 05.03.2010, 18:54
quelle
1

Sie können dies tun, indem Sie das fetch-Attribut angeben.

  

(10) fetch (optional) Wählen Sie zwischen sequenziellem Auswählen und Abrufen von externem Join.

Sie finden es unter: Kapitel 6. Collection Mapping , scrollen Sie nach unten zu: 6.2. Eine Sammlung zuordnen

BEARBEITEN

Ich habe im Kommentar Ihrer Frage gelesen, dass Sie eine Möglichkeit haben möchten, eine SQL-Abfrage auszuführen. Hier eine Referenz, die möglicherweise von Interesse sein könnte:

Kapitel 13 - Native SQL-Abfragen

und wenn Sie eine Möglichkeit haben möchten, es durch HQL möglich zu machen:

Kapitel 11. HQL: Die Hibernate-Abfragesprache

In Kapitel 11 möchten Sie nach 11.3 scrollen. Zuordnungen und Verknüpfungen .

%Vor%

Ich denke jedoch, dass ClassB ein Mitglied von ClassA sein muss. Weitere Nacharbeiten sollen helfen.

Eine andere Sache, die sich als nützlich erweisen könnte, ist benannte Abfragen :

%Vor%

Und diese Abfrage innerhalb von Code wie folgt aufrufen:

%Vor%

Bitte werfen Sie einen Blick auf den referenzierten Link von Ayende, der ihn ausführlicher erklärt.

    
Will Marcouiller 05.03.2010 17:27
quelle

Tags und Links