如何使用JPA在字段上搜索子字符串?

时间:2011-11-13 22:21:44

标签: java jpa

我的应用程序使用JPA访问后端数据库。

我有一个映射到表的Java类。该类有一个字符串字段(称为状态),由一系列" 0"和" 1" s组成。我需要根据字段的第二个字符选择一些记录。这是我可以不使用JPA(我正在使用MS SQLServer)。

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

如何使用JPA进行操作?

3 个答案:

答案 0 :(得分:8)

JPA中有一个SUBSTRING函数:

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函数   返回一个字符串。

答案 1 :(得分:4)

JPQL也有SUBSTRING(..)函数:see here。所以它与原生查询中的相同。

当JPA不支持您需要的某些功能时,您可以进行本机查询并将结果映射到pojo。

答案 2 :(得分:1)

JPQL有一个子字符串函数,可用于修剪实体。确保在查询中使用实体名称,并注意子字符串函数不是零索引

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