已知hql="from VoteGroup as a LEFT JOIN FETCH a.voteStatus as b WHERE b.userInfo.id=1 order by a.id "是错误的。因为他是在a左连接b的结果后再加上条件**.id=1,因为left join 后b有为空的字段,oracle显示的数据条数会变少。想要的效果实际上是左连接之前b的表先进行条件的筛选。
解决方案 »
- 怎样把逐行读取的数据保存到对象中
- 项目在本地正常上传到空间上(Resin 3.0.23 )jsp可以访问,action访问不了?这个问题困扰我好几天了,希望有高手帮忙
- java.lang.NullPointerException。 是否是Spring配置的问题? 谢谢!
- 使用hibernate,表的主外健字段名是不是要一样啊
- Help me!调用webService异常错误!
- 如何用soap传递xml文档
- spring中如何代理多个对象
- 关于tomcat黑窗口
- ejb开发查询的小问题?
- 请问老手我学过一些windows编程,现在想学网络的一些编程(比如j2ee等相关的)应从哪里开始。
- hibernate关联关系出错,大家帮帮忙
- 大虾帮忙:struts中如何设计有未知个数的属性的表单?
我怎么觉得你的这个hql语句是正确的呢
我上面的那种写法,语法没有问题,显示的数据会变少。例如a表中有10条数据,b表2条,left join 后显示的b的字段中会有很多null(b.userInfo.id)值,oracle中这时候再加上筛选条件b.userInfo.id=1 ,就变成结果2条数据了。
我想要的是b表先筛选条件**.id=1,然后再a左连接b出来的效果。
达到人数后开始培训!欢迎加入探讨,提问题!
=============================================
《企业应用架构模式》pdf 系列书籍已经上传至群共享,欢迎下载!
能够经常提问及回答问题的朋友,可以得到群主的精美小礼品,赶紧加入吧!
不过可以通过filter来实现。
在你的映射表VoteGroup.xml中,配置filter:
<set name="voteStatus" inverse="true" >
<key column="voteGroup_id" />
<one-to-many class="VoteGroup" />
<filter name="sqlfilter" />
</set><filter-def name="sqlfilter" condition="id=:id" >
<filter-param name="sqlfilter" type="int" />
</filter-def>调用时,
session.enableFilter("sqlfilter").setParameter("id",1);
List list=session.createQuery("from VoteGroup as a LEFT JOIN FETCH a.voteStatus as b order by a.id ").list();