2009-03-20 12 views
9

Ich habe 2 Einheiten: Auto und Räder (oneToMany) und ich möchte mein Auto, mit allen Rädern und (das ist der schwierige Teil) von Wheels.location bestellt. Der folgende Code löst eine Ausnahme mit der Meldung "illegaler Versuch der Dereferenzierung der Sammlung" aus.HQL Bestellung innerhalb einer Sammlung

Select c 
    from Car 
     LEFT JOIN FETCH c.wheels 
order by c.wheels.location 

Haben Sie eine Idee, wie dies zu tun ist und ob dies in HQL möglich ist?

Antwort

9
SELECT DISTINCT c 
    FROM Car 
     LEFT JOIN FETCH c.wheels AS wheels 
ORDER BY wheels.location 
+1

Sie können aufsteigend angeben und absteigende Reihenfolge unter Verwendung von ASC und DESC. z.B. '... ORDER BY DESC'. –

1

Hmm. Denken Sie, dass Sie möglicherweise einen Alias ​​verwenden müssen?

Select c from Car 
     LEFT JOIN FETCH c.wheels wheel 
order by wheel.location 
1

Ich denke, dass Sie das Auto Alias ​​in der von der Anfrage gesetzt haben:

SELECT DISTINCT c 
    FROM Car c 
     LEFT JOIN FETCH c.wheels AS wheels 
ORDER BY wheels.location 

Es folgt ein Auszug aus dem Hibernate-Dokumentation auf hql ordering:

select cat from Cat cat 
     join cat.kittens kitten 
group by cat.id, cat.name, cat.other, cat.properties 
having avg(kitten.weight) > 100 
order by count(kitten) asc, sum(kitten.weight) desc