特定の nls_lang を設定する必要がある oracle データベース ビューにアクセスする必要があります。そうでない場合、インデックスは使用されず、データベースはほぼ永久にロックされます。これはデザイン的に悪い冗談だとわかっていますが、私が変更できるものではありません。
システム変数user.country
やを設定することで nls_lang を変更できますuser.language
。これにより、nls_lang が正しく変更されます。ただし、これは私のアプリケーションに未知の方法で影響を与え、さらに悪いことに、同じサーバー上の他のアプリケーションに影響を与えます。簡単に言えば、これは可能な解決策ではありません。
では、サーバーに別のロケールを設定したまま、単一の JPA ネイティブ クエリに nls_lang を設定するにはどうすればよいでしょうか? エンティティに必要な PK を含まないビューから選択しているため、ネイティブ クエリである必要があります。
私はもう試した
entityManager.createNativeQuery("ALTER SESSION set NLS_LANGUAGE = 'American'").executeUpdate();
クエリを実行する前に、おそらくクエリが別のセッションで実行されたため、効果がないようです。理論的にLocale.setDefault()
は、一時的に設定してクエリの後に復元することもできますが、それでは同時実行性の問題が発生します。