日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

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

發布時間:2023/12/3 java 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JPA 2.1和Java EE 7中的JPQL增强功能(第1部分– JOIN ON) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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 2.1和Java EE 7中的JPQL增强功能(第1部分– JOIN ON)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。