珠海手机网站开发,香河做网站公司,长春信息网招聘,个人简历(电子版)Java EE 7已经存在了几年#xff0c;它提供了一些非常有用且期待已久的功能#xff0c;例如实体图以及对存储过程和结果映射的更好支持。 有关概述#xff0c;请参阅Thorben Janssen的博客文章 。 但是#xff0c;我想添加有关JPA查询语言功能的更详细的摘要。 在JPQL和Cri… 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