弊社の状況は以下の通りです。
- エンタープライズ アプリケーションでの永続化には、(必ず純粋な) JPA を使用します。
- パフォーマンス上の理由から、かなり複雑なネイティブ クエリをあちこちで使用しています。
- データベース (Oracle 11g) にアクセスするとき
APP_ACCESS
は、テーブルの「所有者」とは異なるデータベース ユーザーを使用します (APP_OWNER
)。これは、データベース管理者からの厳しい要件です。 - 現時点では、スキーマ名 (
APP_OWNER
) がネイティブ クエリにハードコードされています。
"SELECT * FROM " + DatabaseSchemaConstants.SCHEMA_NAME + ".LOCATION"
言うまでもなく、「所有者」ユーザー名の変更はコードの変更を意味するため、このハードコーディングについて特に満足しているわけではありません。
だからここに私の質問があります:
純粋な JPA でネイティブ クエリのデフォルト データベース スキーマを構成するにはどうすればよいでしょうか?
これは私がこれまでに見つけたものです:
具体的には、永続化ユニットとファイルの組み合わせを提案するこの回答:orm.xml
<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"
version="1.0">
<persistence-unit-metadata>
<persistence-unit-defaults>
<schema>myschema</schema>
</persistence-unit-defaults>
</persistence-unit-metadata>
</entity-mappings>
しかし、これはネイティブ クエリには当てはまらないと思います (現在テスト中です)。ここでのもう 1 つの問題は、orm.xml
実際には構成用ではないということです。(ただし、Java コードでハードコーディングするよりも優れています)。
同様の答えを持つ別の投稿:
さらなる質問:
の使用を提案するこの回答を参照してください{h-schema}
。適切に見えますが、Hibernate 固有です。「純粋なJPA」にとどまりたいです。もう 1 つの問題は、Hibernate のドキュメントに {h-schema} に関する記述が見つからなかったことです。そのため、この機能に頼るのは安全ではありません。
JPAエンティティとクエリ、およびネイティブクエリなど、すべてのデフォルトデータベーススキーマを設定する標準的なJPAの方法はありますか?
あるいは、ネイティブ クエリの構成のどこかに設定された「パラメータ」または「設定」を使用できれば、これを解決できます。