Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

como usar o regexp_like da Oracle no Hibernate HQL?


Na verdade, você não pode comparar o resultado de REGEXP_LIKE com nada, exceto em instruções condicionais em PL/SQL.

O Hibernate parece não aceitar uma função personalizada sem um returnType, pois você sempre precisa comparar a saída com algo, ou seja:
REGEXP_LIKE('bananas', 'a', 'i') = 1

Como o Oracle não permite que você compare o resultado dessa função com nada, criei uma solução usando a condição de caso:
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)")
        );
    }

}

E seu HQL deve ficar assim:
REGEXP_LIKE('bananas', 'a', 'i') = 1

Vai funcionar :)