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