如何在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