sql >> Databasteknik >  >> RDS >> Oracle

hur använder man Oracles regexp_like i Hibernate HQL?

Du kan faktiskt inte jämföra resultatet av REGEXP_LIKE med något annat än i villkorliga uttalanden i PL/SQL.

Hibernate verkar inte acceptera en anpassad funktion utan en returnType, eftersom du alltid behöver jämföra utdata med något, dvs:

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

Eftersom Oracle inte tillåter dig att jämföra den här funktionens resultat med ingenting, kom jag på en lösning med case condition:

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

}

Och din HQL ska se ut så här:

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

Det kommer att fungera :)



  1. php-utgång från mysql till html-tabell

  2. Använda subquery i en Check-sats i Oracle

  3. Saknade anslutningar i tomcat jdbc anslutningspool

  4. PostgreSQL, konfigurera om befintlig tabell, ändra primärnyckeln till typ=seriell