在JPQL中,实体比较(相等性)语句是通过标识比较还是equals()方法比较,或者其他方式比较的?
我花了几个小时在谷歌和阅读Hibernate和JPA规范上搜索,但仍然找不到它是如何工作的。考虑以下实体:
class MyProductType{Integer id;}
class MyProduct{Integer id; MyProductType pType;}
现在是JPQL/HQL查询:
SELECT t FROM MyProductType t, MyProduct p WHERE p.pType = t
(我知道这是一个丑陋的查询语句,只要关注where从句的语义就可以了。)
那么 p.pType = t
是如何评估的呢?
JSR 317提到了“entity_expression”比较,但它的行为尚未明确。
编辑:我不喜欢Rika在下面的建议,因为.id方法包含了隐式内连接,而通常在查询中使用外部(左)连接时不需要这样做。