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)相关推荐

  1. JPA 2.1和Java EE 7中的JPQL增强功能(第1部分– JOIN ON)

    Java EE 7已经存在了几年,它提供了一些非常有用且期待已久的功能,例如实体图以及对存储过程和结果映射的更好支持. 有关概述,请参阅Thorben Janssen的博客文章 . 但是,我想添加有关 ...

  2. Java EE 7中包含哪些JSR?

    我开始填写所有应该加入Java EE 7的Java规范请求的表. 由于平台版本仍在确定中,因此某些细节很难确定. 完整的Java EE 7 EJB产品具有以下标准组件和API: 名称 版 描述 JSR ...

  3. 在 Java EE 组件中使用 Camel Routes

    2019独角兽企业重金招聘Python工程师标准>>> 摘要:你可以通过集成 Camel 和 WildFly 应用服务器(使用 WildFly-Camel 子系统)在 Java EE ...

  4. react api_使用Java EE 8中的React式API加速服务

    react api 服务通常可以通过异步处理进行优化,即使不改变其对外界的行为. 某些服务效率不高的原因是,它们需要等待其他服务提供结果才能继续下去. 让我们看一下如何在不等待外部REST服务的情况下 ...

  5. 使用Java EE 8中的反应式API加速服务

    服务通常可以通过异步处理进行优化,即使不改变其对外界的行为. 某些服务效率不高的原因是,它们需要等待其他服务提供结果才能继续下去. 让我们看一下如何在不等待外部REST服务的情况下调用它们,并独立进行 ...

  6. js ajax 访问java函数,将url分配给Java EE项目中的ajax(js)函数

    我正在Ajax中尝试使用我的第一个项目,并且在分配指向要从服务器中获取的文件的绝对URL时遇到问题.将url分配给Java EE项目中的ajax(js)函数 这是我的函数: function fetc ...

  7. Java EE 7中的WebSocket客户端API

    在本文中,让我们探索谈论较少的Web Socket Client API,以及如何在Java EE 7容器本身中利用它. Web套接字服务器API规则 JSR 356的服务器端API(Java的Web ...

  8. java ee jms_在Java EE 7中自动配置JMS资源

    java ee jms JMS 2.0(Java EE 7平台的一部分)引入了许多不错的功能 . 其中之一是能够声明JMS资源以进行自动部署. Java EE 7之前的版本 使用@Resource注入 ...

  9. java ee各类组件_在Java EE组件中使用骆驼路线

    java ee各类组件 从现在开始我一直在与Camel合作,我真的很喜欢它的简单性. 在Java EE之上使用它一直是一个挑战,我最近发表了一篇关于如何做到这一点的演讲,而在Java EE中引导Cam ...

最新文章

  1. MyBatis1:MyBatis入门
  2. 【OpenCV入门教程之五】 分离颜色通道多通道图像混合(转)
  3. MySQL连接方式:长连接或者短连接
  4. linux的硬件系统管理,Linux 系统硬件管理的基础知识(四)
  5. 【HIVE 之 DDL,DML】
  6. Visual Studio 2010全球发布会 上海站(图)
  7. Ubuntu 手动挂载U盘
  8. oracle相克军,Oracle视频课程在线观看与下载-甲骨论-172
  9. Julia:Plots 包的属性汇总
  10. python自然语言处理之spacy详解
  11. 全套BAT大厂面试题整理锦集
  12. 批处理+Linux书籍+黑客编程+脚本攻防+逆向工程书籍+海量资源(pdf+chm电子书)
  13. python下的一个好用的日历库,支持农历和公历互转,四柱反查等功能
  14. Messaging短信源码导入AndroidStudio
  15. Spring入门自学
  16. 【名企秋招】360公司2017年秋季校招开始喽~ 立即报名
  17. linux服务器下载bt,在Linux服务器上配置Transmission来离线下载BT种子
  18. Oracle数据库cmd命令基本命令
  19. 契约锁解读四川、山东新规,推动采购合同电子化
  20. 南昌大学《嵌入式系统》期末考试试卷真题(含答案)

热门文章

  1. 2021“MINIEYE杯”中国大学生算法设计超级联赛(8)(1002,1004,1006,1009)
  2. CF587F-Duff is Mad【AC自动机,根号分治】
  3. NOI.AC#2139-选择【斜率优化dp,树状数组】
  4. CF585E-Present for Vitalik the Philatelist【莫比乌斯反演,狄利克雷前缀和】
  5. 【2018.4.7】模拟赛之五-ssl2386 序列【dp】
  6. HiveSQL常用优化方法全面总结
  7. Lombok的@Data生成的hashCode和equals方法坑
  8. JavaFX鼠标移动事件
  9. 淘宝秒杀系统设计的几个注意点
  10. Oracle入门(十二F)之表分区