1

JPA を使用してコンテナー管理の Oracle データソースに接続するプロジェクトがあり<non-jta-datasource>persistence.xmlある時点で動的に構築されるネイティブ クエリを使用する必要があります。Oracle のデフォルトではschema、クエリを作成するためにテーブル名に を指定する必要がありますが、スキーマ名にアクセスすることはできません (そうすべきではありません)。

まず第一に、これは期待される動作ですか?実行する場合SELECT * FROM TABLE、Hibernate はデータソース パラメータに名前を変更し、SELECT * FROM SCHEMA.TABLE代わりに実行する必要がありますか?

そうでない場合、動的にスキーマ名を取得する方法はありますか? データソースが WebLogic/JBoss によって管理されている場合でも?

4

1 に答える 1

0

ステートメントを実行alter session set current_schema=SCHEMA;して、オブジェクトの可視性を切り替えることができます。ただし、これは DDL ステートメントであり、バインド変数プレースホルダーをサポートしていません。残念ながら、接続プールから接続が取り消されたときのコールバック ステートメントの実行をサポートする JPA はありません。

通常、他のスキーマからオブジェクトにアクセスする必要があり、スキーマ プレフィックスを使用したくない場合は、スキーマにシノニムを作成します。これは、そのような「問題」を解決する通常の方法です

于 2015-05-15T18:11:47.540 に答える