Всъщност не можете да сравните резултата от 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
Ще работи :)