如何在JPQL中评估实体比较(相等)语句:是通过身份比较还是通过equals()或其他?实体比较如何在JPQL WHERE子句中起作用?
我花了几个小时的谷歌搜索和通过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方法包括隐式内部联接,通常不是你想要的情况下查询使用外(左)连接。
查询是否有效?我之所以问这个问题,是因为通常会看到p.pType.id = t.id或其他类似的东西。因为您仍然从数据库中查询,并且数据库本身不在对象中。 – Rika 2014-10-10 13:40:53
这是一个简化的示例查询。我目前的实际情况要复杂得多。但是,它适用于实体比较。问题在于它是如何工作的(JPA是否按照您所描述的那样进行了id比较,或者它对实体使用了equals())。我想弄清楚的是,我能否依靠简短的语法,或者我不得不按照你的建议去做完整的ID声明。 – sierre 2014-10-10 13:48:25