2016-05-31 104 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") 
相关问题