JPA:相当于Oracle的REGEXP_SUBSTR

时间:2014-10-02 10:58:58

标签: java regex oracle jpa named-query

我有以下Oracle SQL查询:

SELECT SUBSTR(col, 0, INSTR(col, REGEXP_SUBSTR(col, '\.\d+$')) -1) AS col_new, col as col_orig AS col_orig FROM tab;

我的表格数据如下:

col
ABC.A.01
ABC.A.02

以上查询返回的结果如下:

col_new  col_orig
ABC.A    ABC.A.01
ABC.A    ABC.A.02

我正在尝试将其迁移到JPA命名查询。直到现在我才能像这样进行查询:

SELECT SUBSTRING(f.col, 0, LENGTH(f.col) - LOCATE('.', REVERSE(f.col))), f.col FROM tab f;

我之所以这样做是因为我无法在JPA for Oracle的REGEXP_SUBSTR中找到相应的内容。我的JPA命名查询在ABC.A.P01等数据示例中失败。

是否可以告诉我如何使用REGEXP_SUBSTR的等效项将我的SQL查询迁移到JPA命名查询。

2 个答案:

答案 0 :(得分:0)

我发现JPA中没有REGEXP_SUBSTR的等价物。所以我决定坚持原生查询执行。

答案 1 :(得分:0)

如果您使用的是eclipselink,请使用SQL在SQLQL语句中集成SQL。这提供了使用本机SQL查询的替代方法,因为查询可能需要JPQL中不支持的函数。

SQL函数包括SQL字符串(内联到JPQL语句中)和要转换为SQL字符串的参数。使用问号字符(?)来定义SQL中从SQL函数参数转换的参数。

您可以使用SQL以非标准语法调用数据库函数,嵌入SQL文本,并在JPQL中执行任何其他SQL操作。使用SQL,您仍然可以使用JPQL进行查询。

实施例

select o from Entity o order by SQL('REGEXP_SUBSTR(?, ''[0-9]+'', 1, 1)', o.code)