2013-01-03 14 views
10

Mam trzy tabele: class, student i teacherJak używać podzapytania do klauzuli "od" w stanie hibernacji?

table class 
{ 
    class_id(PK) 
} 

table student 
{ 
    student_id(PK) 
    class_id(PK+FK) 
} 

table teacher 
{ 
    teacher_id(PK) 
    class_id(PK+FK) 
} 

Mam zapytanie w SQL, który działa prawidłowo.

SELECT data.class_id, count(data.class_id) AS count 
FROM ((SELECT class_id FROM student) 
     union all 
     (SELECT class_id FROM teacher)) AS data 
GROUP BY data.user_id 
ORDER BY count desc 

Zapytanie zawiera sub zapytanie w FROM i jedności działania. Nie mogę przekonwertować go do HQL.

proszę o wydajne zapytanie HQL z powyższego zapytania SQL.

Odpowiedz

8

Niestety HQL does not support UNION queries. Dwa alternatywne strategie w celu rozwiązania problemu są:

  • Mapowanie Pojo to a a view
  • Albo Inheritance mapping. Szczególnie Table per concrete class strategia z abstrakcyjnego Person nadklasy dziedziczone zarówno przez Student i Teacher wydaje się pasować problemu dobrze:

    select p.id, count(c) 
    from Person p join p.classes c 
    group by p.id 
    order by count(c) desc 
    
+0

Dzięki za linki z dokumentacją. Ponowne przeczytanie tych sekcji było tego warte. – carbontax

7

Nie można umieścić podkwerendy w klauzuli from w HQL. Tylko klauzule: select lub where.

Powiązane problemy