1

特定の 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()は、一時的に設定してクエリの後に復元することもできますが、それでは同時実行性の問題が発生します。

4

1 に答える 1

1

最初にトランザクションを開始し、設定とクエリに同じEntityManagerを使用するようにしてください。

于 2012-11-27T14:59:24.367 に答える