Właściwie nie można porównywać wyniku REGEXP_LIKE z niczym, z wyjątkiem instrukcji warunkowych w PL/SQL.
Hibernate wydaje się nie akceptować niestandardowej funkcji bez returnType, ponieważ zawsze trzeba porównywać dane wyjściowe z czymś, np.:
REGEXP_LIKE('bananas', 'a', 'i') = 1
Ponieważ Oracle nie pozwala na porównanie wyniku tej funkcji z niczym, wymyśliłem rozwiązanie wykorzystujące warunek przypadku:
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)")
);
}
}
Twoja HQL powinna wyglądać tak:
REGEXP_LIKE('bananas', 'a', 'i') = 1
To zadziała :)