Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie verwende ich regexp_like von Oracle in Hibernate HQL?

Tatsächlich können Sie das Ergebnis von REGEXP_LIKE mit nichts vergleichen, außer mit bedingten Anweisungen in PL/SQL.

Hibernate scheint eine benutzerdefinierte Funktion ohne returnType nicht zu akzeptieren, da Sie die Ausgabe immer mit etwas vergleichen müssen, z. B.:

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

Da Oracle es Ihnen nicht erlaubt, das Ergebnis dieser Funktion mit nichts zu vergleichen, habe ich eine Lösung gefunden, die die Fallbedingung verwendet:

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)")
        );
    }

}

Und Ihr HQL sollte so aussehen:

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

Es wird funktionieren :)