当前页面: 开发资料首页 → J2EE 专题 → Hibernate查询出现笛卡尔积的解决方法
Hibernate查询出现笛卡尔积的解决方法
摘要: Hibernate查询出现笛卡尔积的解决方法
向各位大大请教一个菜菜的问题:
在学习Hql语句查询的时候写了个查询 如下:
String queryStr = "from UserRole userRole where 1=1 and (userRole.user.userName='XXXX' or userRole.role.roleName='XXXX' )";
Query query = session.createQuery(queryStr);
List list = query.list();
查询出来的结果出现1000多条是个笛卡尔积,其中userName对应的字段不是表T_SYSTEM_USER_ROLE 和 T_SYSTEM_USER 关联的外键
roleName对应的字段 也不是表 T_SYSTEM_USER_ROLE 和表 T_SYSTEM_ROLE关联的外键。
把语句写成
String queryStr = "from SystemUserRole userRole "
+ "where 1=1 "
+ "and "
+ "userRole.role.roleName in (select role.roleName from Role as role where roleName = 'XXXX') "
+ "and "
+ "userRole.user.userName in (select user.userName from User as user where userName = 'XXXX') ";
查询出来的结果是正确的,向各位大大请教一下如果不想写嵌套子查询那查询语句该怎么写
UserRole SystemUserRole Role User
这么多表啊
第二句写了有点手误应该是 from UserRole .... 不是form SystemUserRole
String queryStr = "from UserRole userRole "
+ "where 1=1 "
+ "and "
+ "userRole.role.roleName in (select role.roleName from Role as role where roleName = 'XXXX') "
+ "and "
+ "userRole.user.userName in (select user.userName from User as user where userName = 'XXXX') ";
String queryStr = "from UserRole userRole where 1=1 and (userRole.user.userName='XXXX' and userRole.role.roleName='XXXX' )";
UserRole 是关联表为什么不做多对多的关系~`~而映射出一个这个表的对象~
重复数据有两种解决方式,一种是sql的消重的关键字~~~一个是用
Set s = new HashSet(list);
接分
给出的方法都没用,用其他方法解决了。随便结分了