Eigenlijk kun je het resultaat van REGEXP_LIKE met niets vergelijken, behalve in voorwaardelijke instructies in PL/SQL.
Hibernate lijkt geen aangepaste functie te accepteren zonder een returnType, omdat je de uitvoer altijd met iets moet vergelijken, namelijk:
REGEXP_LIKE('bananas', 'a', 'i') = 1
Omdat Oracle je niet toestaat om het resultaat van deze functie met niets te vergelijken, heb ik een oplossing bedacht met behulp van 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)")
);
}
}
En je HQL zou er zo uit moeten zien:
REGEXP_LIKE('bananas', 'a', 'i') = 1
Het zal werken :)