2013-02-04 73 views
0

使用JPA2.0(通過Hibernate 4),我可以通過使用EntityManager.find(java.lang.Class entityClass,java)查詢數據庫中的查詢條件是主鍵的記錄。 lang.Object primaryKey)。但是,如果查詢條件不是主鍵(例如,選擇城市值爲'london'的所有記錄),是否必須創建TypedQuery並顯式提供SQL語句?我應該採用什麼最佳做法?不使用主鍵的JPA查詢

+0

建議您閱讀TypedQuery以及傳遞給它的查詢是什麼。這不是SQL,更像是JPQL – DataNucleus

+0

我明白,但我正確地認爲我必須使用TypedQuery,沒有其他方法嗎?我很樂意這樣做,我只是想確保我最大限度地利用Hibernate/JPA並採用最佳實踐,無論可能如何。 –

回答

0

JPA Criteria API爲您提供編譯時安全,你不會構建自己的動態查詢(使用JPQL或SQL)得到的水平。尤其是當許多條件開始蔓延(可選字段,條件子查詢......)時,它可能變得非常容易出錯。

的標準API可以更復雜的寫(尤其是對於簡單的查詢),你需要創建一個圍繞標準的API一些管道代碼,使之成爲真正的動態和易於使用的語言。它並沒有真正提供開箱即用。

有些人喜歡使用Criteria API,而另一些人喜歡命名查詢/ JPQL。

+0

這正是我需要的,謝謝。我將使用CriteriaQuery方法。 –