3

Hibernate SQL クエリで COLLATE ステートメントを使用しようとしていますが、ステートメントを認識しません。

CONSULTA: FROM Articulos WHERE activo=0 
              and (codigodearticulo like '%CIN EMB%' COLLATE='Modern_Spanish_CI_AI'
              or descripcion like '%CIN EMB%' COLLATE='Modern_Spanish_CI_AI'  
              or descripcionadicional like '%CIN EMB%' COLLATE='Modern_Spanish_CI_AI' )
              and codigodelinea in
              (select CODIGODELINEA from Lineas where CATAUTOPARTES='1')

アプリのコンパイル時に、Hibernate は次の例外を返します。

- line 1:107: unexpected token: COLLATE
- line 1:107: unexpected token: COLLATE
- line 1:107: unexpected token: COLLATE
- Error hibernate: unexpected token: COLLATE near line 1, column 107

問題が見つかりません。MSSQL Server では問題なく動作します。

4

2 に答える 2

2

残念ながら、HQL は SQL を完全に置き換えるものではなく、照合をまったく指定できないようです。

Criteria クエリで指定できます。この回答を参照してください

于 2013-07-16T20:56:02.920 に答える
0

HQL の代わりに:

String hql = "SELECT e" +
    " FROM EntityJPA e" +
    " WHERE e.mycolumn COLLATE 'utf8_bin' = 'VALUE'"

Query query = entityManager.createQuery(hql);

このようなネイティブクエリを使用できます

String sql = "SELECT t" +
    " FROM entity_table t" +
    " WHERE t.mycolumn COLLATE 'utf8_bin' = 'VALUE'" 

ネイティブ クエリを実行します。

Query query = entityManager.createNativeQuery(sql);

これは、ネイティブ クエリがターゲット データベースの SQL 言語 (この場合は mySQL) への依存関係を作成することを念頭に置いた、より単純なソリューションでした。

別の DB エンジンを使用する可能性は非常に低いため、これはまだ許容範囲でした。

于 2021-09-17T12:10:37.703 に答える