hql的left join问题

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这个对象,语句如下:
这个语句是错误的:
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关联得来的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值