hibernate的sql查询别名有关问题

hibernate的sql查询别名问题

    最近在项目中采用hibernate执行sql查询的时候,发现一个问题,估计是hibernate的bug,用sql进行多表关联查询的时候,发现hibernate对sql语句的别名支持不是太好,在数据库中执行没有问题的sql语句,一放到程序中就会出错,让人很是郁闷,比如:

select pc.fd_id as fd_id, sc.fd_name as courseName,
tm.fd_name as trainName,tm.doc_creator_id as creator_id,
oe.fd_name as creator,  oe1.fd_id as dept_id ,
oe1.fd_name as deptName ,oe2.fd_id as superOrg_id ,
oe2.fd_name as superOrg 
from hrt_train_plan_course pc, 
hrt_train_main tm , 
hrt_study_course sc, 
sys_org_element oe, 
sys_org_element oe1, 
sys_org_element oe2  
where pc.fd_train_main_id = tm.fd_id 
 and pc.fd_study_course_id =sc.fd_id 
 and tm.doc_creator_id = oe.fd_id 
and tm.doc_dept_id = oe1.fd_id 
and oe.fd_parentorgid = oe2.fd_id 

 sql语句在数据库中执行完全没问题,但是放到org.hibernate.Session.createSQLQuery(sql)中便会报错,fd_name 列找不到的异常,将所有的别名全部去掉,如下:

select pc.fd_id , sc.fd_name ,
tm.fd_name ,tm.doc_creator_id,
oe.fd_name ,  oe1.fd_id ,
oe1.fd_name ,oe2.fd_id ,
oe2.fd_name 
from hrt_train_plan_course pc, 
hrt_train_main tm , 
hrt_study_course sc, 
sys_org_element oe, 
sys_org_element oe1, 
sys_org_element oe2  
where pc.fd_train_main_id = tm.fd_id 
 and pc.fd_study_course_id =sc.fd_id 
 and tm.doc_creator_id = oe.fd_id 
and tm.doc_dept_id = oe1.fd_id 
and oe.fd_parentorgid = oe2.fd_id 

 

执行该查询不报错,但是所查询出来的数据完全不是在数据库中查询出来的那样,查询出来的fd_name列的值全变成了第一个fd_name的值,即hrt_study_course表fd_name的值,其他表的fd_name值也变成了hrt_study_course表中的fd_name值,最后没办法了,只能采用jdbc查询,或者将第一个sql创建为视图再用hibernate的sql查询。有哪位大神遇到过类似问题并知道答案的,欢迎一起交流。

1 楼 mjx_mujunxian 2011-11-18  
可以给列取别名 但是不能用 hibernate会自动给列去别名