一个学科表(Field),一个用户表(User),多对多关系。
学科表有两个字段,id和descripiton,用户表有众多字段,不罗列了
Field中有SET集合users
User中有SET集合fields
现在要查掌握id like '520%'的女性用户
我这样写的:
from User u,Field f where u.gender='m' in (select f.users from Field where f.id like '520%')
持续报错!
我的项目代码中恰好有一个多对多的关联映射的类:User(用户)和Role(角色),其中,User类中有roles集合,而Role类中有users集合。我用我的代码测试了一番。
首先写了下面这句:
select user from User user where user.sex='男' and user in (select role.users from Role role where role.id>5)
这样不行,报错。原因是,Hibernate的HQL语句中的“in条件”句如:x in(‘a’,’b’,’c’),要求的是x是(‘a’,’b’,’c’)中的一个元素,而select role.users这样查出来的是集合的集合,它内部的元素应该是一个集合:set<user> in (select role.users…),而不是一个对象: user in (select role.users…)。
可惜的是HQL语句没有set<user> in (select role.users….)这样的子句,后来,查了一下Hibernate的参考文档,得到解决方法。原来,Hibernate的HQL语句中的“in条件”中,可加入”elements”关键词,即上面的查询语句变成:
select user from User user,Role role where user.sex='男' and user in elements(role.users) and role.id>5
这样就行了。
不过还有一个小问题,就是这样查询出来,会出现许多重复记录,原因是查询出的每一个符合的role后,会通过role.getUsers()查出users集合,这样,当然就可能出现有几个role拥有相同的user的现象。很容易解决,加多一个“distinct ”关键词就行。
select distinct user from User user,Role role where user.sex='男' and user in elements(role.users) and role.id>5
好了,解决了。那位CSDN中的朋友提的问题也解决了,它的hql语句如下:
select distinct u from User u,Field f where u.gender='m' and u in elements(f.users) and f.id like '520%'
分享到:
相关推荐
《Hibernate in Action》中文版是一本深度探讨Java持久化框架Hibernate的专业书籍,它全面而深入地介绍了如何在实际开发中高效、灵活地使用Hibernate。这本书是针对Java开发者,特别是那些致力于构建数据库驱动应用...
《Hibernate In Action(Java.Persistence.with.Hibernate)》是一本深入探讨Hibernate框架的书籍,源码则是作者为了配合书中理论部分而提供的实践示例。Hibernate是一个流行的开源对象关系映射(ORM)框架,它允许...
Hibernate In Action 3 第三部分 中文 入门教程
《Hibernate in Action》是一本深度探讨Java持久化框架Hibernate的专业书籍,中文版的发布使得更多的中国开发者能够深入了解和掌握这一强大的ORM(对象关系映射)工具。Hibernate是Java开发中的重要组成部分,它极大...
《Hibernate In Action》是一本深度探讨Java持久化框架Hibernate的专业书籍。这本书主要针对J2EE开发者,特别是那些致力于使用Java技术构建数据库驱动应用程序的人群。Hibernate作为Java领域中最为流行的ORM(对象...
hibernate in action 第二版中文版 j2ee课程教学参考书籍
本资源为Hibernate in action中文完整版,共635页,正文内容608页。分为三个分卷,全部下载可正常解压缩。 本书为Hibernate之父亲自执笔,无可替代的Hibernate和ORM技术圣经,职业Java程序员必备秘籍。
方便网友们下载,特此做了个汇总,文件包括(共4个): 中文版《Hibernate实战》 - 电子版(部分) 中文版《Hibernate实战(第2版)》-扫描版 英文版《Java Persistence With...英文版《Hibernate in action》- 电子版
《Hibernate in Action》是一本深度探讨Java持久化框架Hibernate的专业书籍,中文版的出现使得国内开发者能够更加方便地学习和理解这一强大的ORM(对象关系映射)工具。Hibernate是Java开发中广泛使用的开源框架,它...
《Hibernate in Action》中文版是一本专为Java开发者编写的深度探索Hibernate框架的入门教程。Hibernate作为Java领域中广泛使用的对象关系映射(ORM)工具,极大地简化了数据库操作,使得开发者可以更专注于业务逻辑...
《Hibernate in Action》第二版是一本深度探讨Java持久化框架Hibernate的专业书籍,它详细解析了如何在实际项目中高效地运用Hibernate。这本书旨在帮助开发者理解ORM(对象关系映射)的概念,掌握Hibernate的核心...
《Hibernate In Action中文版》是一本深入探讨Java持久化框架Hibernate的专业书籍,旨在帮助开发者全面理解和熟练运用Hibernate进行数据库操作。这本书将引导读者从基础知识到高级特性,一步步探索Hibernate的强大...
《Hibernate in Action中文版》是IT领域内关于Hibernate框架的一部权威著作,其第二版更是对初版进行了全面的更新与扩展,旨在为读者提供更深入、更实用的Hibernate技术指导。本书由多位资深开发人员编写,内容涵盖...
### Hibernate In Action 2: 入门教程 #### 一、引言 《Hibernate In Action 2》是一本深入讲解Hibernate框架的专业书籍,适合于Java开发者深入了解并掌握Hibernate这一强大的对象-关系映射(ORM)工具。本书不仅...
这三本经典的教材《Struts in Action》、《Hibernate in Action》和《Spring》深入浅出地讲解了这些框架的核心概念、用法以及实际应用。 《Struts in Action》主要关注的是Struts框架,它是由Apache软件基金会维护...
标题和描述中提到的“hibernate in action.pdf”指向了一本深入探讨Hibernate框架及其在Java应用程序中应用的书籍。本书旨在帮助读者理解对象-关系持久性的核心概念,以及Hibernate如何作为解决这一复杂问题的有效...