Na verdade, você não pode comparar o resultado de REGEXP_LIKE com nada, exceto em instruções condicionais em PL/SQL.
O Hibernate parece não aceitar uma função personalizada sem um returnType, pois você sempre precisa comparar a saída com algo, ou seja:
REGEXP_LIKE('bananas', 'a', 'i') = 1
Como o Oracle não permite que você compare o resultado dessa função com nada, criei uma solução usando a condição de caso:
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)")
);
}
}
E seu HQL deve ficar assim:
REGEXP_LIKE('bananas', 'a', 'i') = 1
Vai funcionar :)