En fait, vous ne pouvez pas comparer le résultat de REGEXP_LIKE à quoi que ce soit, sauf dans les instructions conditionnelles en PL/SQL.
Hibernate semble ne pas accepter une fonction personnalisée sans returnType, car vous devez toujours comparer la sortie à quelque chose, c'est-à-dire :
REGEXP_LIKE('bananas', 'a', 'i') = 1
Comme Oracle ne vous permet pas de comparer le résultat de cette fonction à rien, j'ai trouvé une solution en utilisant la condition case :
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)")
);
}
}
Et votre HQL devrait ressembler à ceci :
REGEXP_LIKE('bananas', 'a', 'i') = 1
Ça marchera :)