Ve skutečnosti nemůžete srovnávat výsledek REGEXP_LIKE s ničím jiným než s podmíněnými příkazy v PL/SQL.
Zdá se, že Hibernate nepřijímá vlastní funkci bez returnType, protože vždy potřebujete výstup s něčím porovnat, např.:
REGEXP_LIKE('bananas', 'a', 'i') = 1
Protože vám Oracle neumožňuje porovnávat výsledek této funkce s ničím, přišel jsem s řešením pomocí podmínky případu:
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)")
);
}
}
A váš HQL by měl vypadat takto:
REGEXP_LIKE('bananas', 'a', 'i') = 1
Bude to fungovat :)