我使用的是JPA 2。0个条件来构建以下查询(简化):
select n from notif n where n.message ~ 'b.*la'
我正在使用postgresql db,我真的需要~操作符,而不是像。是否有类似于CriteriaBuilder的东西。我可以使用的功能?或者,在postgres中是否有~操作符的函数形式,以便我可以使用提到的cb。函数法我只找到了postgresql regexp_matches函数,但它返回的是一个匹配数组,而不是布尔值。
解决方案:由于从criteria API迁移到JPQL是不可能的,所以我最终编写了一个postgres函数:
'CREATE OR REPLACE FUNCTION "regexp_search"(character varying,character varying) RETURNS boolean AS \'select $1 ~ $2;\' LANGUAGE sql;'
用CB呼叫。功能:
Expression<Boolean> regexp_search = cb.function("regexp_search", Boolean.class, message,cb.literal(re));
2条答案
按热度按时间yqyhoc1h1#
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
nhhxz33t2#
不需要为此定义额外的函数。
textregexeq(string, pattern)
等同于string ~ pattern