0

假设我有以下表格:

Table A: id b-id
Table B: id property

我可以用 JPQL 语言过滤表 A 的元素吗?

SELECT a FROM A a JOIN ab-id targetId WHERE targetId.property = : someValue

我想获取表 A 的元素,其中引用的 B 元素具有 property = someValue

如果我介绍第三张桌子

Table A: id b-id
Table B: id c-id
Table C: id property

如何在 c.property=someValue 处获取 A 的元素?

我开始了解 ORM 的力量,但有些概念对我来说仍然很模糊。谢谢您的回答

4

1 回答 1

1

JPQL 查询对实体而不是数据库表进行操作。我假设实体和持久属性的名称与给出的表和数据库列的名称相匹配。

因为所讨论的所有关系都是单值、一对一或多对一(每个A只连接到一个B(或可能不连接到任何一个),每个B都连接到一个C),所以不需要在查询中指定连接全部。

SELECT a FROM A a WHERE abcproperty = someValue

无需担心路径中的空值,因为如 JPA 2.0 规范中所述:

Path expression navigability is composed using “inner join” semantics. 
That is, if the value of a non-terminal field in the path expression is null, 
the path is considered to have no value, and does not participate in the 
determination of the result.

同样不适用于集合值属性(一对多、多对多),因为无法通过路径表达式导航到它们的属性。

于 2013-02-19T19:25:53.053 回答