我的应用程序使用JPA访问后端数据库。
我有一个映射到表的Java类。该类有一个字符串字段(称为状态),由一系列" 0"和" 1" s组成。我需要根据字段的第二个字符选择一些记录。这是我可以不使用JPA(我正在使用MS SQLServer)。
SELECT * FROM Machines where SUBSTRING(status, 2, 1) = '1'
如何使用JPA进行操作?
答案 0 :(得分:8)
JPA中有一个SUBSTRING函数:
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'