1.如果HQL使用left join或其它,必须在实体类中维护对方的一个实例或集合。hql里面不能写on ,所以得on里面的条件都写在where里面。
语法如下:session.enableFilter("typefilter").setParameter("type","xxxxxxxx");
List list=session.createQuery("select p from Parent p left join p.children c").list();
例如:两个对象:TblAutoBusyworkInfo(作业基本信息表),TblAutoBusyworkInstance(作业实例表),TblAutoBusyworkInstance有个属性: TblAutoBusyworkInfo tblAutoBusyworkInfo,所以,如果我们要通过join关联两个对象查询,就要通过TblAutoBusyworkInstance(作业实例表)中的tblAutoBusyworkInfo属性来获得TblAutoBusyworkInfo这个对象,而不能直接使用TblAutoBusyworkInfo这个对象,语句如下:
语法如下:session.enableFilter("typefilter").setParameter("type","xxxxxxxx");
List list=session.createQuery("select p from Parent p left join p.children c").list();
例如:两个对象:TblAutoBusyworkInfo(作业基本信息表),TblAutoBusyworkInstance(作业实例表),TblAutoBusyworkInstance有个属性: TblAutoBusyworkInfo tblAutoBusyworkInfo,所以,如果我们要通过join关联两个对象查询,就要通过TblAutoBusyworkInstance(作业实例表)中的tblAutoBusyworkInfo属性来获得TblAutoBusyworkInfo这个对象,而不能直接使用TblAutoBusyworkInfo这个对象,语句如下:
这个语句是错误的:
hql.append("select new map(t.id as id,t.lastBusyInstanceId as lastBusyInstanceId,b.wfInstanceId as wfInstanceId,b.status as status,b.executeStatus as executeStatus) from ");
hql.append("TblAutoBusyworkInfo t left join TblAutoBusyworkInstance b where b.id=t.lastBusyInstanceId ");
hql.append("select new map(t.id as id,t.lastBusyInstanceId as lastBusyInstanceId,b.wfInstanceId as wfInstanceId,b.status as status,b.executeStatus as executeStatus) from ");
hql.append("TblAutoBusyworkInfo t left join TblAutoBusyworkInstance b where b.id=t.lastBusyInstanceId ");
正确的语句如下:
hql.append("select new map(t.id as id,t.lastBusyInstanceId as lastBusyInstanceId,b.wfInstanceId as wfInstanceId,b.status as status,b.executeStatus as executeStatus) from ");
hql.append("TblAutoBusyworkInstance b right join b.tblAutoBusyworkInfo t where b.id=t.lastBusyInstanceId or t.lastBusyInstanceId=null");
从上面的语句可以看出来TblAutoBusyworkInfo的对象t不是直接得出来的,而是通过b.tblAutoBusyworkInfo关联得来的。
hql.append("TblAutoBusyworkInstance b right join b.tblAutoBusyworkInfo t where b.id=t.lastBusyInstanceId or t.lastBusyInstanceId=null");
从上面的语句可以看出来TblAutoBusyworkInfo的对象t不是直接得出来的,而是通过b.tblAutoBusyworkInfo关联得来的。