代码如下:
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怎么写条件呢
from ProjectBD p left join p.bidCompany b where xmguid=? order by subtime
这个b.xxx这个条件怎么加上去?(加到on后面而不是where后面)
------其他解决方案--------------------
这样不行的,加到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);
------其他解决方案--------------------