我正在使用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));
答案 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