JPA ネイティブ クエリでの特殊文字のエスケープ
Java Persistence API (JPA) 内でネイティブ SQL クエリを構築する場合、特殊文字により解析の問題が発生する可能性があります。そのような文字の 1 つはコロン (':') で、これは MySQL ユーザー変数でよく使用されます。
課題: MySQL ユーザー変数でのコロンのエスケープ
Forインスタンスとして、次のクエリを考えてみましょう:
SELECT foo, bar, baz, @rownum:= if (@id = foo, @rownum+1, 1) as rownum, @id := foo as rep_id FROM foo_table ORDER BY foo, bar desc
JPA の createNativeQuery メソッドを使用してこのクエリを実行すると、@rownum 割り当てのコロンの後のスペースが原因で例外が発生します。
解決策: バックスラッシュを使用してコロンをエスケープする
コロン文字をエスケープするには、コロン文字の前にバックスラッシュ () を付ける必要があります。上記の例では、クエリを次のように変更します。
SELECT foo, bar, baz, @\rownum:= if (@id = foo, @\rownum+1, 1) as rownum, @\id := foo as rep_id FROM foo_table ORDER BY foo, bar desc
コロンをエスケープすることで、JPA はクエリを正しく解析し、実行できるようになります。このエスケープ手法は、MySQL ユーザー変数のコロンだけでなく、JPA のクエリ解析を妨げる可能性のある特殊文字にも適用されることに注意してください。
以上がJPAネイティブクエリで特殊文字をエスケープするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。