Hibernate多对多关联映射的HQL中的in条件查询问题
2014-02-15 09:43
357 查看
Hibernate多对多关联映射的HQL中的in条件查询问题
群里有朋友求解一个问题,高分求一条HQL多对多查询语句 。
问题描述见 http://topic.csdn.net/u/20090621/16/4eac6fe0-bf3e-422e-a697-f7584732f66e.html,摘要如下:
一个学科表(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%'
本文原创,转载请注明出处,谢谢!http://www.blogjava.net/rongxh7(心梦帆影JavaEE技术博客)
群里有朋友求解一个问题,高分求一条HQL多对多查询语句 。
问题描述见 http://topic.csdn.net/u/20090621/16/4eac6fe0-bf3e-422e-a697-f7584732f66e.html,摘要如下:
一个学科表(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%'
本文原创,转载请注明出处,谢谢!http://www.blogjava.net/rongxh7(心梦帆影JavaEE技术博客)
相关文章推荐
- Hibernate多对多关联映射的HQL中的in条件查询问题
- Hibernate多对多关联映射的HQL中的in条件查询问题
- ORM框架Hibernate多对多关联映射的HQL中的in条件查询问题
- Hibernate多对多关联映射的HQL中的in条件查询问题
- Hibernate多对多关联映射的HQL中的in条件查询问题
- Hibernate 多对多关联映射, 中间表加查询条件
- hibernate hql中当查询条件为时间格式时的问题
- 使用hql或条件查询解决一对多关联查询的N+1查询问题
- Hibernate的学习之路十七(HQL条件查询)
- : hibernate hql 书写 投影查询 问题
- Hibernate一对多关联映射的配置及其级联删除问题
- hibernate多表关联查询VO的问题
- hibernate中日期条件查询问题setDate,setTimestamp
- 解决Spring和Hibernate整合时HQL查询语句乱码问题
- Hibernate多条件查询,HQL拼接
- hibernate+spring中,sql查询的映射问题备忘录
- (转)Hibernate中关于多表连接查询hql 和 sql 返回值集合中对象问题
- 在使用Hibernate时,因为一个查询需要更多的表连接而要使用SQL来解决性能问题。然而返回的结果集中包含了没有映射的Entity类中的表字段,在这个SQL中还有使用如何将层次关系的父子结点显示为横行
- Hibernate中in查询一个问题传多个参数
- Hibernate 使用 HQL 查询 使用List 作为查询条件的注意(也是相当于别名查询)