final String sql="select * from classtab as a left join classtab as b on a.pid = b.cid where a.dsid=?";
List<?> li= getHibernateTemplate().executeFind(new HibernateCallback<Object>(){
public Object doInHibernate(Session session) throws HibernateException, SQLException {
Query query=session.createSQLQuery(sql);
query.setInteger(0, dsid);
return query.list();
}
});
return li ;
返回的结果跟在查询分析器里面的结果不一致
最后将sql改成
final String sql="select a.cid,a.catimg,a.dsid,a.pid,a.cname,b.fname from classtab as a left join (select cid as pid,cname as fname from classtab) as b on a.pid = b.pid where a.dsid=?";
b表只取了2个要的字段
然后查询结果是正确的。
应该是hibernte查询的一个BUG,使用left join同表查询会覆盖字段。
测试使用不同的表left join没有同样的问题
List<?> li= getHibernateTemplate().executeFind(new HibernateCallback<Object>(){
public Object doInHibernate(Session session) throws HibernateException, SQLException {
Query query=session.createSQLQuery(sql);
query.setInteger(0, dsid);
return query.list();
}
});
return li ;
返回的结果跟在查询分析器里面的结果不一致
最后将sql改成
final String sql="select a.cid,a.catimg,a.dsid,a.pid,a.cname,b.fname from classtab as a left join (select cid as pid,cname as fname from classtab) as b on a.pid = b.pid where a.dsid=?";
b表只取了2个要的字段
然后查询结果是正确的。
应该是hibernte查询的一个BUG,使用left join同表查询会覆盖字段。
测试使用不同的表left join没有同样的问题