ホームページ >データベース >mysql チュートリアル >Hibernate ネイティブ クエリで MySQL の代入演算子 (:=) を使用する方法は?

Hibernate ネイティブ クエリで MySQL の代入演算子 (:=) を使用する方法は?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-03 16:04:02439ブラウズ

How to Use MySQL Assign Operator (:=) in Hibernate Native Queries?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。