Hibernate ネイティブ クエリの MySQL Assign 演算子
Hibernate を使用する場合、ネイティブ クエリで subselect ステートメントを使用する必要が生じる場合があります。ネイティブ クエリを使用すると、独自の構文を使用して基礎となるデータベースと直接やり取りできます。
ただし、Hibernate 内のネイティブ クエリで MySQL 割り当て演算子 (:=) を使用しようとすると、次の例外が発生する可能性があります。パラメータ接頭辞「:」の後には許可されません ....」。これは Hibernate の既知の問題 (HHH-2697) が原因です。
解決策
幸いなことに、Hibernate 4.1.3 以降のバージョンではこの問題が解決されています。ネイティブ クエリで MySQL の assign 演算子を使用する場合、バックスラッシュ () でエスケープできるようになりました。
たとえば、次のネイティブ クエリを考えてみましょう。
<code class="sql">SELECT k.`news_master_id` AS id, @row := @row + 1 AS rownum FROM keyword_news_list k JOIN (SELECT @row := 0) r WHERE k.`keyword_news_id` = :kid ORDER BY k.`news_master_id` ASC</code>
このクエリを実行するにはHibernate では、次のコードを使用します。
<code class="java">sessionFactory.getCurrentSession() .createSQLQuery(query) .setParameter("kid", kid) .uniqueResult();</code>
代入演算子をバックスラッシュでエスケープすると、クエリは正常に実行されます。
以上がHibernate ネイティブ クエリで MySQL の代入演算子 (:=) を使用する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。