如何在JPA条件构建器中使用本机db运算符(postgres~)?

时间:2013-01-03 10:55:18

标签: java postgresql jpa jpa-2.0

我正在使用JPA 2.0标准来构建以下查询(简化):

select n from notif n where n.message ~ 'b.*la'

我正在使用postgresql db,我真的需要〜运算符,而不是。有没有相当于我可以使用的CriteriaBuilder.function的东西?或者,在postgres中是否有〜运算符的函数形式,所以我可以使用上面提到的cb.function方法。我只找到了postgresql regexp_matches函数,但它返回的是匹配数组而不是布尔值。

解决方案: 由于从标准API转移到JPQL是不可能的,我最终写了一个postgres函数:

'CREATE OR REPLACE FUNCTION "regexp_search"(character varying,character varying) RETURNS boolean AS \'select $1 ~ $2;\' LANGUAGE sql;'

用cb.function调用它:

Expression<Boolean> regexp_search = cb.function("regexp_search", Boolean.class, message,cb.literal(re));

1 个答案:

答案 0 :(得分:2)

REGEXP或〜不是JPQL标准的一部分。您可以使用本机SQL查询。

如果使用EclipseLink,则支持REGEXP,并且可以使用Postgres,

http://www.eclipse.org/eclipselink/documentation/2.4/jpa/extensions/j_regexp.htm#regexp

您还可以使用SQL函数调用JPQL中的任何SQL特定语法,

http://www.eclipse.org/eclipselink/documentation/2.4/jpa/extensions/j_sql.htm#sql