2011-12-06 44 views
0

嗯,首先:我發現這個問題:JPQL VS標準阿比

What to use: JPQL or Criteria API?

和其他搜索我想,標準API的唯一的好處是,可以檢查查詢,如果它不是」 t正確,返回一個編譯器錯誤。 是不是? 如果不是,哪些是使用JPQL或Criteria Api的優勢和劣勢?

PS:這個問題是這樣的其他問題以後出生:

https://stackoverflow.com/questions/8342955/error-in-criteriaquery 和困難的我發現當我在20分鐘內使用JPQL正確的方法來解決這個問題......

+0

[使用什麼:JPQL或Criteria API?]的可能重複(http://stackoverflow.com/questions/3858406/what-to-use-jpql-or-criteria-api) –

+0

@ don roby:as我寫道,我讀過這個問題,但在這種情況下,問題是具體的,我會回答更通用的... – Filippo1980

+0

這個問題對我來說看起來很普通,並且有一個相當好的和相當一般的接受答案。 –

回答

0

我想你在問什麼時候你考慮一個標準查詢。 我將進一步假設您正在使用應用程序服務器。

Criteria API存在允許以防止SQL注入的類型安全方式構建動態SQL查詢。否則,您會將SQL字符串連接在一起,這既容易出錯又會帶來安全風險:即SQL注入。這將是唯一一次你想要使用Criteria API。

如果查詢保持基本相同,但只需接受不同的參數,則應使用帶註釋的@NamedQueries,這些更簡單的預編譯可緩存在二級緩存中並在服務器啓動期間進行驗證。

這基本上是關於條件查詢與@NamedQueries的經驗法則。根據我的經驗,您很少需要Criteria API,但它很適合那些需要它的罕見時間。

希望這會有所幫助。