Hibernate ネイティブ クエリでの MySQL Assign (=) 演算子のエスケープ
Hibernate ネイティブ クエリを使用する場合、使用中にエラーが発生する可能性があります。コロン (:) の後のスペースによる MySQL の代入演算子 (:=)。この問題は、副選択ステートメントが必要な場合に特に顕著です。
提供されたコードは、次のことを示しています。
SELECT sub.rownum FROM (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) AS sub WHERE sub.id = :nid
setParameter を使用してこのクエリを実行すると、例外が発生し、コロンの後の誤ったスペースが強調表示されます。 .
幸いなことに、Hibernate はこの問題に対する解決策を提供するようになりました。 Hibernate 4.1.3 以降では、以下に示すようにバックスラッシュ () を使用して代入演算子をエスケープできます。
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
コロンをエスケープすると、Hibernate は構文を正常に解釈し、副選択クエリを実行できるようになります。効果的に。
以上がHibernate ネイティブ クエリで MySQL の代入演算子 (:=) をエスケープする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。