Du kan faktiskt inte jämföra resultatet av REGEXP_LIKE med något annat än i villkorliga uttalanden i PL/SQL.
Hibernate verkar inte acceptera en anpassad funktion utan en returnType, eftersom du alltid behöver jämföra utdata med något, dvs:
REGEXP_LIKE('bananas', 'a', 'i') = 1
Eftersom Oracle inte tillåter dig att jämföra den här funktionens resultat med ingenting, kom jag på en lösning med case condition:
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)")
);
}
}
Och din HQL ska se ut så här:
REGEXP_LIKE('bananas', 'a', 'i') = 1
Det kommer att fungera :)