2011-11-13 48 views
4

我的應用程序使用JPA來訪問後端數據庫。如何使用JPA在字段上搜索子字符串?

我有一個Java類映射到一個表。該類有一個由一系列「0」和「1」組成的字符串字段(稱爲狀態)。我需要根據字段的第二個字符選擇一些記錄。這裏是我可以不使用JPA(我正在使用MS SQLServer)。

SELECT * FROM Machines where SUBSTRING(status, 2, 1) = '1' 

我該如何使用JPA?

回答

8

有在JPA的子功能:

http://download.oracle.com/otn-pub/jcp/persistence-2.0-fr-eval-oth-JSpec/persistence-2_0-final-spec.pdf

4.6.17.2.1 「字符串函數」

(...)

SUBSTRING(string_primary ,simple_arithmetic_expression [,simple_arithmetic_expression])

(...)

SUBSTRING函數的第二個和第三個參數表示要返回的子字符串的起始位置和長度。這些參數是整數。 第三個參數是可選的。如果未指定,則返回從字符串的開始位置到末尾的子串 。字符串的第一個位置用1表示。SUBSTRING函數 返回一個字符串。

+0

Piotr,非常感謝您的意見。最好。 – curious1

4

JPQL也有SUBSTRING(..)函數:see here。所以它將和原生查詢一樣。

當JPA不支持您需要的某些功能時,您可以創建本機查詢並將結果映射到pojo。

+0

Bozho,我檢查了這個文件,並嘗試了子字符串的功能,一切都像一個魅力。謝謝! – curious1

+0

@ curious1隨時將答案標記爲已接受 – Bozho

1

JPQL有一個可用於修剪實體的子字符串函數。請確保您在查詢中使用實體名稱,並且還要注意子字符串函數不是零索引

SELECT * FROM Machines m where SUBSTRING(m.status, 2, 1) = '1' 
相關問題