代码如下:
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 ( 这里 )
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 ( 这里 )
from ProjectBD p left join p.bidCompany b where xmguid=? and b.xxxxx=? order by subtime 不行吗?
这问题自己解决了,解决方法就是加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);