2

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));
4

1 に答える 1

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

于 2013-01-03T13:51:15.800 に答える