【问题标题】:How to use a native db operator (postgres ~ ) with JPA criteria builder?如何将本机数据库运算符(postgres ~ )与 JPA 标准构建器一起使用?
【发布时间】:2012-12-17 17:32:31
【问题描述】:

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

【问题讨论】:

    标签: java postgresql jpa jpa-2.0


    【解决方案1】:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-23
      • 1970-01-01
      • 2020-11-19
      • 2020-06-12
      • 1970-01-01
      • 2016-08-04
      • 1970-01-01
      • 2015-03-14
      相关资源
      最近更新 更多