2017-05-25 4 views
1

Ich möchte Zeilen, die eine eindeutige fieldName haben. Und diese Abfrage funktioniert gut in PostgreSQL.HQL - Inner Join Fehler

select f from FieldType as f inner join 
    (select fa.fieldName, min(fa.id) as id from FieldType fa group by fa.fieldName) 
    as f1 on f.fieldName =:f1.fieldName and f.id =:f1.id 

Aber ich kann nicht diese Abfrage machen in Java mit HQL zu arbeiten. Ich habe immer diesen Fehler

org.hibernate.hql.internal.ast.QuerySyntaxException: unerwartetes Token: (

Entfernen geklam- mert nur bewegt Fehler zum nächsten Zeichen Wie kann ich das beheben. ? dieses ich bin offen für alle Vorschläge

+0

HQL und SQL sind verschiedene Sprachen. Sie können keine SQL-Abfrage an eine Methode übergeben, die eine HQL-Abfrage erwartet, genauso wie Sie keinen C++ - Code an einen Java-Compiler übergeben können. –

+0

Das ist eher wie eine native Abfrage, verwenden Sie die native Abfrageoption von Hibernate –

+0

Ich bin mir nicht sicher, was es nicht über die Unterabfrage gefällt, aber ich bin ziemlich sicher, dass es über = nicht glücklich sein wird: bezeichnet einen Parameter, den Sie von außen setzen müssen, und das Verknüpfen mit einem Set-Parameter ist nicht sinnvoll. – Deltharis

Antwort

2

Es scheint, Sie Vorteil HQL nehmen müsste eine Art korrelierte Abfrage statt, um auszuführen:.

select f from FieldType as f 
where (f.fieldName, f.id) in 
    (select fa.fieldName, min(fa.id) as id 
    from FieldType fa 
    group by fa.fieldName)