2012-07-31 14 views
5

Przeszukuję sposób, aby wykonać lewe połączenie z tą samą tabelą za pomocą hql.HQL, lewe połączenie na tym samym stole

To moje zapytanie

FROM Tvshow e 
    LEFT JOIN Tvshow e1 ON e1.num = e.num 
WHERE e1.code = '024' 
    AND e.code is not null 
    AND e.code != '024' 

Hibernacja nie wydają się jak na operatora.

Odpowiedz

0

nie używam hibernacji, ale sądząc po tym przykładzie:

from Cat as cat 
inner join cat.mate as mate 
left outer join cat.kittens as kitten 

Od tej strony: http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html#queryhql-joins-forms

Wygląda na to po prostu nie zrobić dalej? Daj mi znać, jeśli się mylę, a ja to załatwię.

FROM Tvshow e 
    LEFT JOIN Tvshow e1 
WHERE e1.code = '024' 
    AND e.code is not null 
    AND e.code != '024' 
+0

usunąć select, mój błąd, ale błąd to ten sam –

+0

zamierzam zmieniać moją odpowiedź. Nie używam hibernacji, ale szukam składni. – Aushin

+0

@roberttrudel daj mi znać, jeśli to pomoże. Nigdy nie używałem HQL, więc próbuję odgadnąć z dokumentacji. – Aushin

4

Lewe sprzężenia w HQL są możliwe tylko w przypadku powiązania między dwoma obiektami. Ponieważ zapytanie powoduje, że połączona jednostka nie ma wartości NULL, połączenie wewnętrzne może zrobić to samo. Łączenie wewnętrzne, ze składnią łączenia, jest również możliwe tylko wtedy, gdy istnieje powiązanie między dwoma elementami. Ale można to zrobić poprzez dodanie testu równości w klauzuli WHERE:

select e from Tvshow e, Tvshow e1 
where e.num = e1.num 
and e1.code = '024' 
and e.code is not null 
and e.code != '024' 
+0

Przy składni wewnętrznego łączenia, linia 'i e.code nie jest pusta 'jest niepotrzebna. –

Powiązane problemy