sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo usar regexp_like de Oracle en Hibernate HQL?

En realidad, no puede comparar el resultado de REGEXP_LIKE con nada excepto con declaraciones condicionales en PL/SQL.

Hibernate parece no aceptar una función personalizada sin un tipo de retorno, ya que siempre necesita comparar la salida con algo, es decir:

REGEXP_LIKE('bananas', 'a', 'i') = 1

Como Oracle no le permite comparar el resultado de esta función con nada, se me ocurrió una solución usando la condición 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)")
        );
    }

}

Y su HQL debería verse así:

REGEXP_LIKE('bananas', 'a', 'i') = 1

Funcionará :)