代码如下: 
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 ( 这里 ) 

解决方案 »

  1.   

    用着中动态的查询的话,是不能多表关联的!建议用hql吧!
      

  2.   

    直接where ,,,还有and 啊。。
    from ProjectBD p left join p.bidCompany b where xmguid=?  and b.xxxxx=? order by subtime  不行吗?
      

  3.   

    这样不行的,加到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); 
      

  4.   


    <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);  
      

  5.   

    我也找了半天,最后发现在3.6.9版本里已经解决了这个问题。createAlias("bidCompany", "b",Criteria.LEFT_JOIN,Criteria) 多了一个Criteria参数,这个Criteria参数就是直接加到on后面的。