土豆的小秘密 2007-09-14
hibernate中不能用leftjoinon的解决办法
hibernate中多表查询时,有时需要用到leftjoin,但是不能用leftjoinon。
也就是说,on这个条件是需要写到hbm配置文件中去的。
比如,汽车和车轮这两个对象,我想做下面的查询,,select汽车where车轮=固特异。
其实这个查询很简单,用leftjoin就能实现。但是需要在汽车的hbm配置文件中关联车轮。
HQL语句像这样,select汽车LEFTJOIN车轮where车轮=固特异。
但是如果你不在汽车的hbm文件中建立和车轮的关联,就需要用其他办法了,leftjoinon=no,在hql中没有on这个关键字。
首先说明,这种设计方法并不好,能避免尽量避免。
解决办法有2个。
一个是用普通的多表查询,比如select汽车from汽车,车轮where汽车.id=车轮.属主.idand车轮=固特异。
但是有时候会有重复的记录,需要添加distinct关键字。
另一个是用子查询,比如,select汽车from汽车where汽车.idIN(select车轮.属主.idfrom车轮where车轮=固特异)。
尽量建立关联,直接使用leftjoin是最方便的办法。