Faktisk kan du ikke sammenligne resultatet af REGEXP_LIKE med noget, undtagen i betingede udsagn i PL/SQL.
Hibernate lader til ikke at acceptere en brugerdefineret funktion uden en returnType, da du altid skal sammenligne outputtet med noget, dvs.:
REGEXP_LIKE('bananas', 'a', 'i') = 1
Da Oracle ikke tillader dig at sammenligne denne funktions resultat med ingenting, kom jeg med en løsning ved hjælp af 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)")
);
}
}
Og din HQL skulle se sådan ud:
REGEXP_LIKE('bananas', 'a', 'i') = 1
Det vil virke :)