Oracle
 sql >> Base de données >  >> RDS >> Oracle

comment utiliser regexp_like d'Oracle dans Hibernate HQL ?

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 :)