jpa root.join_JPA 2.1和Java EE 7中的JPQL增强功能(第1部分– JOIN ON)
jpa root.join
Java EE 7已经存在了几年,并且提供了一些非常有用且期待已久的功能,例如实体图以及对存储过程和结果映射的更好支持。 有关概述,请参阅Thorben Janssen的博客文章 。 但是,我想添加有关JPA查询语言功能的更详细的摘要。 JPQL和Criteria API中都提供了它们:
- ON关键字为JOIN指定条件
- FUNCTION调用任意数据库函数
- 处理将实体下调到其特定类型
在本文中,我将重点介绍第一个新增内容。 我将在下一篇文章中添加其他2个。
加入
JPA中的JOIN表达式已经与标准SQL中的JOIN有所不同。 仅当实体之间的映射已经存在时才可以使用JOIN,并且由于使用隐式联接的相关集合的延迟加载而并非总是必需的。 如果您是JPA的初学者,请小心使用JPA JOIN,并仔细阅读文档 。
在JPA 2.1之前,只能使用WHERE子句中的条件过滤最终查询结果。 在大多数情况下,这就足够了。 但是,在使用LEFT JOIN时,您遇到了一个极限,并且您想限制将要从另一个实体联接的对象。 使用LEFT JOIN,您总是总是从第一个实体获得至少一行,但是有时您不想合并来自另一个实体的任何实例,而使最终集合为空。
除了Hibernate中的WITH关键字之外,在JPA中,过去没有标准的方法可以做到这一点。 从JPA 2.1开始,可以使用ON关键字为连接添加条件,类似于SQL JOIN ON。
在JPA中使用JOIN ON的示例
SELECT a FROM Person p LEFT JOIN p.addresses a ON a.city = p.city
上面的代码段将仅检索与该人具有相同城市的那些地址。 通过将条件移到WHERE中可以实现相同的目的,因此我们需要一个具有多个联接的更复杂的示例才能看到其优势:
在JPA中使用JOIN ON的示例
SELECT c FROM Person p LEFT JOIN p.addresses a ON a.city = p.city LEFT JOIN a.country c ON c.region = 'Europe'
在上面的示例中,我们仅获得所在国家/地区,地址和地址均存在,并且其人员所在的城市相同。 使用WHERE有什么区别? 如果最后将ON子句中的两个条件都放在WHERE中,则将包括与一个人的所有地址相关的所有国家,而不仅包括与同一城市相同的地址。 显然,仅在最后应用条件时,结果可能会更大。 使用ON关键字可以在每次联接之后过滤结果,从而在每次连续联接之后得到较小的结果。
但是,即使在将JOIN与ON一起使用时,仍然存在一个限制–实体仅在将它们映射为相关实体时仍然可以联接。
在Eclipselink中以多个根加入
Eclipselink为标准JPA On关键字提供了附加功能。 可以在ON条件下关联不相关的实体 ,从而可以将不相关的实体与查询中已经存在的其他实体关联。 因此,即使我们仅需要单个报告的联接条件,也不希望更新映射,也不需要将字段标记为相关。 同样,从映射生成数据库表和约束的测试由于某种原因(例如,如果大量测试数据中可能存在约束违规),也将不希望使用该测试。
这是在Eclipselink中扩展使用ON的示例(JPA 2.1标准未包含)。 这个人加入了与城市同名的人:
加入多个根实体
SELECT p FROM Person p LEFT JOIN Person p2 ON p2.city = p.city
翻译自: https://www.javacodegeeks.com/2016/02/jpql-enhancements-jpa-2-1-java-ee-7-part-1-join.html
jpa root.join
jpa root.join_JPA 2.1和Java EE 7中的JPQL增强功能(第1部分– JOIN ON)相关推荐
- JPA 2.1和Java EE 7中的JPQL增强功能(第1部分– JOIN ON)
Java EE 7已经存在了几年,它提供了一些非常有用且期待已久的功能,例如实体图以及对存储过程和结果映射的更好支持. 有关概述,请参阅Thorben Janssen的博客文章 . 但是,我想添加有关 ...
- Java EE 7中包含哪些JSR?
我开始填写所有应该加入Java EE 7的Java规范请求的表. 由于平台版本仍在确定中,因此某些细节很难确定. 完整的Java EE 7 EJB产品具有以下标准组件和API: 名称 版 描述 JSR ...
- 在 Java EE 组件中使用 Camel Routes
2019独角兽企业重金招聘Python工程师标准>>> 摘要:你可以通过集成 Camel 和 WildFly 应用服务器(使用 WildFly-Camel 子系统)在 Java EE ...
- react api_使用Java EE 8中的React式API加速服务
react api 服务通常可以通过异步处理进行优化,即使不改变其对外界的行为. 某些服务效率不高的原因是,它们需要等待其他服务提供结果才能继续下去. 让我们看一下如何在不等待外部REST服务的情况下 ...
- 使用Java EE 8中的反应式API加速服务
服务通常可以通过异步处理进行优化,即使不改变其对外界的行为. 某些服务效率不高的原因是,它们需要等待其他服务提供结果才能继续下去. 让我们看一下如何在不等待外部REST服务的情况下调用它们,并独立进行 ...
- js ajax 访问java函数,将url分配给Java EE项目中的ajax(js)函数
我正在Ajax中尝试使用我的第一个项目,并且在分配指向要从服务器中获取的文件的绝对URL时遇到问题.将url分配给Java EE项目中的ajax(js)函数 这是我的函数: function fetc ...
- Java EE 7中的WebSocket客户端API
在本文中,让我们探索谈论较少的Web Socket Client API,以及如何在Java EE 7容器本身中利用它. Web套接字服务器API规则 JSR 356的服务器端API(Java的Web ...
- java ee jms_在Java EE 7中自动配置JMS资源
java ee jms JMS 2.0(Java EE 7平台的一部分)引入了许多不错的功能 . 其中之一是能够声明JMS资源以进行自动部署. Java EE 7之前的版本 使用@Resource注入 ...
- java ee各类组件_在Java EE组件中使用骆驼路线
java ee各类组件 从现在开始我一直在与Camel合作,我真的很喜欢它的简单性. 在Java EE之上使用它一直是一个挑战,我最近发表了一篇关于如何做到这一点的演讲,而在Java EE中引导Cam ...
最新文章
- MyBatis1:MyBatis入门
- 【OpenCV入门教程之五】 分离颜色通道多通道图像混合(转)
- MySQL连接方式:长连接或者短连接
- linux的硬件系统管理,Linux 系统硬件管理的基础知识(四)
- 【HIVE 之 DDL,DML】
- Visual Studio 2010全球发布会 上海站(图)
- Ubuntu 手动挂载U盘
- oracle相克军,Oracle视频课程在线观看与下载-甲骨论-172
- Julia:Plots 包的属性汇总
- python自然语言处理之spacy详解
- 全套BAT大厂面试题整理锦集
- 批处理+Linux书籍+黑客编程+脚本攻防+逆向工程书籍+海量资源(pdf+chm电子书)
- python下的一个好用的日历库,支持农历和公历互转,四柱反查等功能
- Messaging短信源码导入AndroidStudio
- Spring入门自学
- 【名企秋招】360公司2017年秋季校招开始喽~ 立即报名
- linux服务器下载bt,在Linux服务器上配置Transmission来离线下载BT种子
- Oracle数据库cmd命令基本命令
- 契约锁解读四川、山东新规,推动采购合同电子化
- 南昌大学《嵌入式系统》期末考试试卷真题(含答案)
热门文章
- 2021“MINIEYE杯”中国大学生算法设计超级联赛(8)(1002,1004,1006,1009)
- CF587F-Duff is Mad【AC自动机,根号分治】
- NOI.AC#2139-选择【斜率优化dp,树状数组】
- CF585E-Present for Vitalik the Philatelist【莫比乌斯反演,狄利克雷前缀和】
- 【2018.4.7】模拟赛之五-ssl2386 序列【dp】
- HiveSQL常用优化方法全面总结
- Lombok的@Data生成的hashCode和equals方法坑
- JavaFX鼠标移动事件
- 淘宝秒杀系统设计的几个注意点
- Oracle入门(十二F)之表分区