带连接的Spring Data @Query

时间:2016-05-31 14:57:59

标签: spring join spring-data spring-data-jpa

我是Spring Data的新手,我想创建一个允许我在两个实体之间进行内部连接的查询。

我一直在使用此堆栈溢出来尝试澄清某些方面:

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"在他们自己?对此有任何澄清将非常感谢!

2 个答案:

答案 0 :(得分:4)

考虑这个例子

SELECT c FROM Country c

这里,c被称为范围变量。

  

范围变量是迭代的查询标识变量   特定实体类层次结构的所有数据库对象(即   实体类及其所有后代实体类)

您可以阅读有关范围变量here

的更多信息

根据您的查询没有“Area ar”,您需要了解此查询基于JPQL(而不是SQL)。请考虑以下问题:

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

JPQL提供了一种称为连接变量的东西,它表示对指定对象集合的更有限的迭代。在上面的查询中,c1是一个范围变量,而c2是一个绑定到路径c1.neighbours的连接变量,只对该集合中的对象进行迭代。

您可以在this article

中详细了解相关信息

答案 1 :(得分:3)

区域实际上是在用户实体类中定义的,并且在查询区域中使用“ar”别名,并用作连接的第二个实体。

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