站内搜索: 请输入搜索关键词

当前页面: 开发资料首页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);


接分


给出的方法都没用,用其他方法解决了。随便结分了


↑返回目录
前一篇: 求一正则
后一篇: servlet中用forward跳转页面如何到父窗口