2016-05-31 125 views
1

我對Spring Data相當陌生,我想創建一個查詢,這將允許我在兩個實體之間執行Inner Join。Spring Data @Query with Joins

我一直用這個堆棧溢出,試圖澄清某些方面:

How To Define a JPA Repository Query with a Join

它提供結構化查詢作爲這樣的答案:

@Query("select u.userName from User u inner join u.area ar where ar.idArea = :idArea") 

然而在此查詢我沒有看到它在哪裏管理定義「ar」,因爲這兩個實體類都沒有在自己內部實際定義「ar」?任何關於此的澄清將不勝感激!

+0

提示:用戶代表後的「u」是什麼? –

+0

用戶是的,但我的印象是你是從「用戶u」定義的。在這個查詢中沒有「區域ar」? –

回答

3

考慮這個例子

SELECT c FROM Country c 

這裏,C被稱爲範圍可變。

範圍變量是遍歷 所有特定的實體類層次結構的數據庫對象查詢標識變量(即 實體類和它的所有後代實體類)

你可以閱讀更多關於範圍變量here

根據您的查詢,沒有「區域」您需要了解此查詢基於JPQL(不是SQL)。考慮下面的查詢:

SELECT c1, c2 FROM Country c1 INNER JOIN c1.neighbors c2 

JPQL提供了一些所謂的加盟變量,它代表了對象的指定集合更有限的迭代。在上面的查詢中,c1是一個範圍變量,而c2是一個連接變量,它綁定到路徑c1.neighbours並僅遍歷該集合中的對象。

您可以更詳細地this article

2

面積讀到它在用戶的實體類和查詢區域與「AR」別名和作爲的加入第二個實體實際上是定義。

@Query("select u.userName from User u inner join **u.area** ar 
     where ar.idArea = :idArea")