Hibernate Criteria 关联查询 10

对Scott的Dept和Emp使用Criteria进行连接查询查询10号部门员工工资大于等1500的员工信息Criteriacrit=session.createCrit... 对Scott的Dept 和Emp使用Criteria 进行连接查询
查询10号部门员工工资大于等1500的员工信息
Criteria crit = session.createCriteria(Dept.class)
.add(Restrictions.eq("deptno", new Long(10)))
.createAlias("emps", "emps")
.add(Restrictions.ge("emps.sal", new Double(1500)));
list = crit.list();
可是他把工资是1300的也查出来了。
Hibernate 生成的SQL如下:
Hibernate: select this_.DEPTNO as DEPTNO2_2_, this_.DNAME as DNAME2_2_, this_.LOC as LOC2_2_, emps1_.EMPNO as EMPNO3_0_, emps1_.DEPTNO as DEPTNO3_0_, emps1_.ENAME as ENAME3_0_, emps1_.JOB as JOB3_0_, emps1_.MGR as MGR3_0_, emps1_.HIREDATE as HIREDATE3_0_, emps1_.SAL as SAL3_0_, emps1_.COMM as COMM3_0_, dept4_.DEPTNO as DEPTNO2_1_, dept4_.DNAME as DNAME2_1_, dept4_.LOC as LOC2_1_ from SCOTT.DEPT this_ inner join SCOTT.EMP emps1_ on this_.DEPTNO=emps1_.DEPTNO left outer join SCOTT.DEPT dept4_ on emps1_.DEPTNO=dept4_.DEPTNO where this_.DEPTNO=? and emps1_.SAL>=?

Hibernate: select emps0_.DEPTNO as DEPTNO1_, emps0_.EMPNO as EMPNO1_, emps0_.EMPNO as EMPNO3_0_, emps0_.DEPTNO as DEPTNO3_0_, emps0_.ENAME as ENAME3_0_, emps0_.JOB as JOB3_0_, emps0_.MGR as MGR3_0_, emps0_.HIREDATE as HIREDATE3_0_, emps0_.SAL as SAL3_0_, emps0_.COMM as COMM3_0_ from SCOTT.EMP emps0_ where emps0_.DEPTNO=?
发了2条SQL语句如何解决呀?
搞清楚状况了,该死的Scott 下面的Dept和Emp没有设置外键关系。
设置一下就好了。
展开
 我来答
yurentian
2010-09-17 · TA获得超过965个赞
知道小有建树答主
回答量:299
采纳率:0%
帮助的人:336万
展开全部
--------------------------------------------------------------

首先解释为什么一个hql,后台产生2条sql语句,这是正常的。
因为在部门映射文件中(可能是Dept.hbm.xml),部门关联员工,你采用的事fetch的取数方式,如果改用join方式,则只有1条sql语句。

其次,你查员工信息,应该直接查询员工表主数据,10号部门作为一个条件,也就是用Criteria crit = session.createCriteria(EMP.class)加约束条件,而不是Criteria crit = session.createCriteria(Dept.class)。

--------------------------------------------------------------
莱伯泰科
2024-10-28 广告
LabTech Group,即北京莱伯泰科仪器股份有限公司,是业界领先的实验室科学仪器与解决方案提供商。我们专注于分析测试仪器的研发、生产和销售,致力于为全球科研工作者、高校及企业实验室提供高性能、高稳定性的产品与服务。通过持续的技术创新与... 点击进入详情页
本回答由莱伯泰科提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式