日期:2014-05-19  浏览次数:20814 次

Hibernate Criteria查询问题:连表查询增加关联条件(生成的sql条件指定到on后面)
代码如下: 
Session session=this.getHibernateTemplate().getSessionFactory().getCurrentSession(); 
session.createCriteria(ProjectBD.class,"h") 
.add(Restrictions.eq("h.xmguid", xmguid)) 
.addOrder(Order.desc("h.subtime")) 
.createAlias("bidCompany", "b",Criteria.LEFT_JOIN) 
.add(Restrictions.eq("b.xxx", 1)) 
.list(); 

这里连表生成的sql语句中b.xxx这个条件是在where后面的,怎么加到 left join ... on ( 这里 ) 

------最佳解决方案--------------------
直接where ,,,还有and 啊。。
from ProjectBD p left join p.bidCompany b where xmguid=?  and b.xxxxx=? order by subtime  不行吗?
------其他解决方案--------------------
用着中动态的查询的话,是不能多表关联的!建议用hql吧!
------其他解决方案--------------------
顶上去啊,没人回答?没人知道?
------其他解决方案--------------------
该回复于2012-12-04 16:35:02被管理员删除
------其他解决方案--------------------
引用:
用着中动态的查询的话,是不能多表关联的!建议用hql吧!

用hql怎么写条件呢
from ProjectBD p left join p.bidCompany b where xmguid=? order by subtime
这个b.xxx这个条件怎么加上去?(加到on后面而不是where后面)
------其他解决方案--------------------
引用:
直接where ,,,还有and 啊。。
from ProjectBD p left join p.bidCompany b where xmguid=?  and b.xxxxx=? order by subtime  不行吗?

这样不行的,加到where后面会影响返回的结果
这问题自己解决了,解决方法就是加filter 
<set name="bdBidCompany" cascade="all" inverse="true" sort="natural"> 
    <key column="XMGUID" /> 
    <one-to-many class="procurement.bean.BDBidCompany" /> 
    <filter name="ifzhongbiaoFilter" condition="ifzhongbiao=:ifzhongbiao"/> 
</set> 
<filter-def name="ifzhongbiaoFilter"> 
    <filter-param name="ifzhongbiao" type="integer"/> 
</filter-def> 

然后代码中这样 

Session session=this.getHibernateTemplate().getSessionFactory().getCurrentSession(); 
session.enableFilter("ifzhongbiaoFilter").setParameter("ifzhongbiao", 1); 
------其他解决方案--------------------

<set name="bdBidCompany" cascade="all" inverse="true" sort="natural"> 
    <key column="XMGUID" /> 
    <one-to-many class="procurement.bean.BDBidCompany" /> 
    <filter name="ifzhongbiaoFilter" condition="ifzhongbiao=:ifzhongbiao"/> 
</set> 
<filter-def name="ifzhongbiaoFilter"> 
    <filter-param name="ifzhongbiao" type="integer"/> 
</filter-def> 


Session session=this.getHibernateTemplate().getSessionFactory().getCurrentSession(); 
session.enableFilter("ifzhongbiaoFilter").setParameter("ifzhongbiao", 1);  

------其他解决方案--------------------