Hibernate HQL: Verwendung eines komplexen Left Join Fetch

8

Ich möchte einen linken Join in der TASK-Tabelle hinzufügen, wenn die folgende Bedingung eintritt:  LINKE JOIN FETCH                 PROMPT p on (t.id = p.task.id und p.applicationName in ('XXX') )

Hier ist meine hql-Abfrage:

%Vor%

Ich erhalte die folgende Ausnahme wahrscheinlich aufgrund des Schlüsselwortes "on":

%Vor%

Irgendwelche Ideen?

%Vor%

Wie kann ich linksbündig fetch mit der Bedingung p.applicationName in ('XXX') verwenden?

    
Keren 05.11.2009, 11:22
quelle

1 Antwort

23

Hier gibt es mehrere Probleme:

  1. Ihr HQL, wie Sie es gepostet haben, ist nicht wirklich HQL :-) Es ist direkt SQL. Für HQL müssen Sie zugeordnete Zuordnungen verwenden, um Tabellen zu verbinden. Siehe unten für eine verbesserte Version.
  2. Soweit mir bekannt ist, unterstützt ON clause nicht mehrere verknüpfte Bedingungen in Klammern.
  3. NoSuchMethodError ist nicht etwas, was Hibernate werfen würde :-) Sie haben wahrscheinlich eine ältere Version von antlr.jar irgendwo in Ihrem Klassenpfad und sie wird anstelle des von Hibernate erwarteten abgerufen. Finde es und entferne es.

Ohne Ihre Abbildungen zu sehen, ist das Folgende wahrscheinlich ungenau, aber ich werde einen Versuch machen, die passendere HQL zu schreiben:

%Vor%

Beachten Sie, dass prompt nicht abgerufen wird, weil Sie join fetch nicht zusammen mit with condition verwenden können. Sie können es durch inner join fetch und where ersetzen, wenn die Zuordnung erforderlich ist.

Wenn Sie immer noch Probleme haben, nachdem das Klassenpfadproblem gelöst wurde, können Sie Ihre Zuordnungen posten, wenn Sie Hilfe bei der tatsächlichen HQL benötigen.

    
ChssPly76 05.11.2009 17:10
quelle

Tags und Links