2014-04-04 57 views
5

在經歷JPA,QueryDSL的同時,他們都包含了類型安全查詢的概念。但究竟是什麼呢?根據博客/文章,我想這是JPA/QueryDSL的一個特性,它在查詢時驗證它們的參數類型。任何查詢錯誤都會在編譯時顯示,而不是運行時。我對嗎?僅僅是爲了這個還是我在這裏錯過了一些東西?類型安全查詢究竟意味着什麼?

回答

5

QueryDSLCriteria是在JPA中組裝查詢時嘗試強制進行數據類型驗證的庫。

僅僅因爲JPQL只是一個只能在執行時驗證的查詢,所以很容易編寫一個編譯器未檢測到的無效查詢。當然,在編寫代碼時比在運行應用程序時修復更快。

當然,QueryDSL或Criteria都不能保護您的查詢免受各種錯誤(數據類型相關或不相關)的影響,但它比JPQL更安全。

另一方面,在JPQL中編寫查詢可以更容易和更快速。始終是權衡:-)

+0

哇..很好的解釋兄弟你清理我的困惑......謝謝利奧.. –

4

如果API利用編程語言的類型系統來防止類型錯誤,則它是類型安全的。具體而言,QueryDSL使編譯器來驗證存在

  1. 在查詢中使用的所有類(沒有錯字...)和是持久的(即,映射到一個數據庫)
  2. 在查詢中使用的所有屬性存在該對象,並且是持久
  3. 所得查詢語法有效的(沒有缺失條款或關鍵字)
  4. 所有運營商收到一個可接受的類型的操作數

此外,表達式查詢api使您的IDE能夠提供代碼完成(也適用於域類及其屬性)和重構支持(如果屬性被重命名,您可以在元模型中重命名它,並且IDE將在所有查詢中重命名)。

作爲一個好處,編寫包含SQL注入漏洞的查詢是非常困難的。

簡而言之,使用QueryDSL而不是JPQL(或者在沒有靜態元模型的情況下使用JPA critieria查詢)可以更快,更不容易出錯地編寫或更改查詢。

相關問題