请问比如现在有两张表employee员工表和dept部门表.
一:如果employee: id,name,deptId(外键) 三个个字段   dept: id,name两个字段.如果我要得到列表,表连接查询hql="from
Employee e left join e.dept":这样的话生成出来的语句的确是一句:select * from employee left join ......但是如果现在表结构为employee:id,sn,name,deptSn(外键)   dept:id,sn(业务编号,唯一键索引),name,现在employee表外键引用的dept表的业务编号(sn).这样我同样的语句hql="from Employee e left join e.dept";出来的语句就会多好几条,也就是先表连接查询,在去查dept表。请问这是为什么?有什么办法?实际中也不一定外键一定引用的是id,也可能类似这样引用业务编号类的

解决方案 »

  1.   

    以前我也碰到过类似的问题
    HQL联合表查询,
    如果映射文件里面有字段名相同的话,查出来的数据会有问题
    建议你用SQL去查询
    Query query = session.createSQLQuery(sql);
      

  2.   

    我发现如果string hql="from employee e left join e.dept"这样查的话的确会出来多条查询语句的情况,但如果是string hql="select e.id,e.name,e.dept.name from employee e left join e.dept"这样查的话就可以只生成一套查询语句。
    我觉得3楼的有点意思,但不完全对,我看了下hql select from 与 from 的区别这篇文章,大家可以参考下http://blog.csdn.net/chenbo19867758/archive/2010/03/05/5348604.aspx