sie*_*rre 4 hibernate jpa where
在JPQL中如何评估实体比较(相等)语句:是通过身份比较,equals()还是其他方式?
我花了几个小时的时间来仔细研究Hibernate和JPA的规范,但仍然找不到它的工作方式。考虑以下实体:
class MyProductType{Integer id;}
class MyProduct{Integer id; MyProductType pType;}
Run Code Online (Sandbox Code Playgroud)
现在是JPQL / HQL查询:
SELECT t FROM MyProductType t, MyProduct p WHERE p.pType = t
Run Code Online (Sandbox Code Playgroud)
(我知道这是一个丑陋的查询,只关注where子句的语义。)
那么如何p.pType = t评估?
JSR 317提到了“ entity_expression”比较,但是其行为尚不清楚。
编辑:我不喜欢Rika的以下建议是.id方法包括隐式内部联接,如果查询使用外部(LEFT)联接,通常这不是您想要的。
我在http://www.objectdb.com/java/jpa/query/jpql/comparison上找到了它,这是非常有趣的好问题。
可以使用相等运算符(=,<>,==,!=)比较用户定义类(实体类和可嵌入类)的实例。对于实体,如果e1和e2具有相同的类型和相同的主键值,则e1 = e2。对于可嵌入对象,如果e1和e2的内容完全相同,则e1 = e2。
因此,它似乎检查对象的主键值和对象的类型。如此看来,在p.pType = t的情况下,它将检查p.pType的ID(假设id是主键),其id为t,看它们是否相等。然后它将检查两个实体的类型或MyProductType是否相同。
| 归档时间: |
|
| 查看次数: |
1853 次 |
| 最近记录: |