Spring Data @Query使用Join

6
我是一个新手,想要使用Spring Data创建一个查询,可以在两个实体之间进行内部连接。
我一直在使用这个堆栈溢出来澄清某些方面: 如何定义具有联接的JPA存储库查询 它给出了构造查询的答案:
@Query("select u.userName from User u inner join u.area ar where ar.idArea = :idArea")

然而,在这个查询中,我没有看到它是如何定义"ar"的,因为实体类中都没有定义"ar"。能否对此进行澄清将不胜感激!

提示:User 后面的 u 代表什么? - The Head Rush
一个用户,但我印象中u是从“User u”定义的。在这个查询中没有“Area ar”吗? - James Millner
可能是[如何使用Join定义JPA Repository查询]的重复问题(https://dev59.com/q2Ys5IYBdhLWcg3wFP54)。 - nitinsridar
2个回答

5
考虑这个例子。
SELECT c FROM Country c

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

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

您可以在此处阅读更多关于范围变量的信息。

根据您的查询,“没有'Area ar'”这句话需要理解这个查询基于JPQL(而不是SQL)。请参考以下查询:

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

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

您可以在这篇文章中详细了解它。


3

area实际上是在User实体类中定义的,在你的查询中,area使用别名"ar"并作为连接的第二个实体。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接