HQL的左连接_左连接与右连接的区别

HQL的左连接_左连接与右连接的区别最近做一个查询实现把一个表的记录全部显示出来并且显示关联的另外一个表的记录,这当然谁都知道要用到外连接查询,然而过程并不愉快。在Hibernate的映射文件中配置好关联关系之后,查询的时候可以直接使用比如selectnewmap(student.studentIDasstudentID,student.studentAccountasstudentAccount,student.stu

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

最近做一个查询实现把一个表的记录全部显示出来并且显示关联的另外一个表的记录,这当然谁都知道要用到外连接查询,然而过程并不愉快。

在Hibernate的映射文件中配置好关联关系之后,查询的时候可以直接使用比如

select new map(student.studentID as studentID, student.studentAccount as studentAccount,student.studentName as studentName,student.skill.skill as skill) from Student student where student.studentID!=0 and ........

,但是默认使用的内连接,就是说外键必须匹配的记录才能查出来,实现不了要求。
当我决定用左连接查询之后,做了很多尝试,但是因为对HQL不够熟悉,都没有达到要求。比如这样的

select new map(student.studentID as studentID,student.studentAccount as studentAccount,student.studentName as studentName,student.canInterview as canInterview,student.mail as mail,skill.skill as skill,skill.description as description) from Student student left join student.skill skill with student.studentID!=0 and ........
错误,报错:with-clause expressions did not reference from-clause element to which the with-clause
原因因给是是在with语句里面没有用到skill

改成是这样?

select new map(student.studentID as studentID,student.studentAccount as studentAccount,student.studentName as studentName,student.canInterview as canInterview,student.mail as mail,skill.skill as skill,skill.description as description) from Student student left join student.skill skill where student.skill.skillID = skill.skillID and ....... 虽然有了skill,但是,报错:with-clause referenced two different from-clause elements

幸好没有崩溃,想起来看一下书。其实怪就怪在没想起来用到join…where,where对字段的限制并没有那么严格,但是因为在Student关联的是Skill实体,又不能直接用where而放弃join,所以,正确的语句:

select new map(student.studentID as studentID,student.studentAccount as studentAccount,student.studentName as studentName,student.canInterview as canInterview,student.mail as mail,skill.skill as skill,skill.description as description) from Student student left join student.skill skill where student.studentID!=0 and ......

注意,上面的student.studentID!=0其实没有起到条件筛选作用,而是为了后面接上and条件不会出错。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/193407.html原文链接:https://javaforall.net

(0)
上一篇 2025年11月26日 上午8:15
下一篇 2025年11月26日 上午8:43


相关推荐

  • jq动态绑定点击事件「建议收藏」

    jq动态绑定点击事件「建议收藏」jq动态添加的元素需要添加点击事件可用delegateon添加1.delegate<divid="box"></div><buttontype="button"id="addbtn">添加</button&amp

    2025年8月7日
    5
  • 数据库课程设计——MySQL火车票售票系统[通俗易懂]

    数据库课程设计——MySQL火车票售票系统[通俗易懂]数据库课程设计——火车票售票系统听所有人很烦数据库课程设计?阅读本篇文章会让你不那么烦躁~系统开发平台:开发工具:eclipse,sublime开发语言:Java,jsp,css,JavaScript数据库:MySQL中间件:tomcat8.0后台框架:SpringMVC服务器:阿里云ECS线上地址:http://www.shadowingszy.top:8080/TrainT…

    2022年5月19日
    47
  • 解决spark日志清理问题

    解决spark日志清理问题

    2021年11月27日
    180
  • 伪随机数生成器

    伪随机数生成器一 nbsp 点睛随机数可以通过硬件来生成 也可以通过软件来生成 通过硬件生成的随机数列 是根据传感器收集的热量 声音的变化等事实上无法预测和重现的自然现象信息来生成的 像这样的硬件设备就称为随机数生成器 而可以生成随机数的软件则称为伪随机数生成器 因为仅靠软件无法生成真随机数 因此要加上一个 伪 字 二 nbsp 伪随机数生成器的结构伪随机数生成器具有 内部状态 并根据外部输入的 种子 来生成

    2026年3月18日
    3
  • Tengine 2.3.0 发布,阿里巴巴开源的轻量级 Web 服务器「建议收藏」

    Tengine 2.3.0 发布,阿里巴巴开源的轻量级 Web 服务器「建议收藏」Tengine 2.3.0 发布,阿里巴巴开源的轻量级 Web 服务器

    2022年4月21日
    55
  • idea 查看类图_idea查看方法的实现

    idea 查看类图_idea查看方法的实现以BeanFactory为例给大家展示在Idea中查看某个接口的所有的实现类图1.展示一下BeanFactory类2.选中接口右键->Diagrams(showDiagrams)3.出现一个接口类,然后点中接口右键showimplementations或者快捷键ctrl+alt+B4.出现了图然后全选或者快捷键ctrl+a,然后回车就出现了所有的关系图…

    2022年8月15日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号