Oracle
 sql >> Database >  >> RDS >> Oracle

come utilizzare regexp_like di Oracle in Hibernate HQL?

In realtà, non puoi confrontare il risultato di REGEXP_LIKE con qualsiasi cosa tranne che nelle istruzioni condizionali in PL/SQL.

Hibernate sembra non accettare una funzione personalizzata senza un returnType, poiché devi sempre confrontare l'output con qualcosa, ad esempio:

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

Poiché Oracle non ti consente di confrontare il risultato di questa funzione con niente, ho trovato una soluzione utilizzando la condizione del 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 il tuo HQL dovrebbe assomigliare a questo:

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

Funzionerà :)