2013-03-14 81 views
0

當我嘗試運行此操作時,我得到「無法在類上找到相應的構造函數」。如何將SQL查詢轉換爲休眠狀態

SQL:

select c.*, count(s.student_id) 
from class_tbl c  
left join students_tbl s on c.class_id = s.student_id 
group by c.class_id 

這是我嘗試過,但似乎沒有工作 - HQL:

select new Class(class, count(students.studentId)) 
from Class as class  
left join class.students as students 
group by class.classId 

我有我的對象類像一個構造函數:

public Class(Class class, long studentCount){ 
    // [...] 
} 
+5

'class'是Java中的保留字。小心一點。 – 2013-03-14 15:10:23

回答

0

首先,不要將Class用作類名,它是一個保留字。

我覺得你的HQL應該是這樣的:

"select new map(class, count(students.studentId) as studentCount) from Class class left 
join fetch class.students students group by class.classId"); 
+0

感謝您的回覆。我試過了你的建議,現在我收到了另外一條錯誤消息「查詢指定的連接提取,但是提取的關聯的所有者未出現在選擇列表中」 – tironci 2013-03-14 15:44:08

+0

嘗試給學生起一個名字left join class.students students 2013-03-14 16:03:41

+0

如果忘記將提取添加到左側加入,這也可能是錯誤的根源。因此,完整的hql:「從Class類中選擇新的地圖(class,count(students.studentId)作爲studentCount)left 通過class.classId」)加入獲取class.students學生組; – 2013-03-14 16:14:42