sql >> データベース >  >> RDS >> Oracle

Hibernate HQLでOracleのregexp_likeを使用する方法は?

    実際、REGEXP_LIKEの結果をPL/SQLの条件文以外のものと比較することはできません。

    HibernateはreturnTypeのないカスタム関数を受け入れないようです。これは、出力を常に何かと比較する必要があるためです。つまり、

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

    Oracleではこの関数の結果を何も比較できないため、ケース条件を使用した解決策を考え出しました。

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

    そして、HQLは次のようになります。

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

    それは動作します:)



    1. SQL Server 2008 一連の日時を生成する

    2. データセットが変更されたときにSqlDependencyがOnChangeイベントを発生させない

    3. 一時テーブルのpostgresqlスレッドセーフ

    4. xpathを使用してpostgresのXML列からデータを抽出する