実際、REGEXP_LIKEの結果をPL/SQLの条件文以外のものと比較することはできません。
HibernateはreturnTypeのないカスタム関数を受け入れないようです。これは、出力を常に何かと比較する必要があるためです。つまり、
REGEXP_LIKE('bananas', 'a', 'i') = 1
Oracleではこの関数の結果を何も比較できないため、ケース条件を使用した解決策を考え出しました。
public class Oracle10gExtendedDialect extends Oracle10gDialect {
public Oracle10gExtendedDialect() {
super();
registerFunction(
"regexp_like", new SQLFunctionTemplate(StandardBasicTypes.BOOLEAN,
"(case when (regexp_like(?1, ?2, ?3)) then 1 else 0 end)")
);
}
}
そして、HQLは次のようになります。
REGEXP_LIKE('bananas', 'a', 'i') = 1
それは動作します:)