2013-11-22 87 views
0

有人可以帮我写相当于HQL此查询Hibernate查询等效SQL

SELECT IFNULL(oea.`organization_name`,'') FROM `consultation_appointment` ca 
JOIN `organization_employee_association` oea ON ca.`consultation_id` = oea.id 
JOIN professional_profile pp ON oea.`employee_profile_id` = pp.profile_id 

我可以能够参加第一JOIN这样

select ca.name from ConsultationAppointment ca join ca.consultation oea 

因为有organization_employee_association变量ConsultationAppointment类所以更容易加入,难度是organization_employee_association没有直接映射到organization_employee_association类。

即使是GORM标准查询也很有帮助。

+0

均匀,加入这个协会... –

+0

@JB Nizet,如果你不介意的话,你可以使它更清楚 –

+0

你知道你需要实体之间的关联,以创建之间的连接这些实体。所以添加必要的关联。如果不知道任何实体和表格,我就不会更精确。 –

回答

1

HQL不允许加入两个不相关的实体,您应该使用笛卡尔积。

String query = "SELECT ca.name FROM consultation_appointment ca JOIN organization_employee_association oea, professional_profile pp WHERE oea.employee_profile_id = pp.profile_id"; 
List<String> caNames = session.createQuery(query).list(); 

另一种可能性是使用方法createSQLQuery()。它为执行任意连接提供了更大的灵活性。

String query = "SELECT ca.name FROM consultation_appointment ca JOIN organization_employee_association oea ON ca.consultation_id = oea.id JOIN professional_profile pp ON oea.employee_profile_id = pp.profile_id"; 
List<String> caNames = session.createSQLQuery(query).list(); 
+0

而上升,但只有在没有可能的情况下才可以尝试。但是在hql中应该有一些方法,我们需要挖掘 –

+0

我编辑了使用HQL和笛卡尔积的答案。 – thanhnguyen

+0

感谢您的努力,但出现错误,我们也尝试过这样,错误是在查询中使用“on”子句 –