JPA では、ネイティブ クエリを実行するときに、バックスラッシュ文字をダブル バックスラッシュにエスケープする必要があります。たとえば、次のようなwhere句がある場合
UPPER(app.NAME) like UPPER(?) escape '\'
次に、次を含む文字列を作成する必要があります。
UPPER(app.NAME) like UPPER(?) escape '\\'
次に、openJPA 2.2.2 を使用してネイティブ クエリを実行します。
final EntityManager entityManager = EntityManagerFinder.getEntityManager();
final Query query = entityManager.createNativeQuery(sql, Response.class);
SQL ステートメントは XML ファイルから読み取られるため、ここでは Java エスケープは行われません。さらに、デバッグ中に、Java の文字列が XML ファイルの文字列と実際に同じであることを確認しました。
JPA がネイティブクエリに二重のバックスラッシュを期待しているのはなぜですか? これは openJPA のバグですか?