5

JPAでクロスデータベーステーブル結合を行うことは可能ですか?

users別のデータベースのテーブルへの外部キーを持つ 1 つのデータベースにテーブルorganizationsがあります。両方のデータベースが同じ物理マシン上にあります。現在、MySQL では複数のデータベースにまたがるクエリを作成できますが、JPA でこれを行う方法がわかりません。

Java POJOの@Entity注釈はデータベースの名前を取らないため、クロス DB 関係をマークする方法はありません。

この状況の回避策はありますか? おそらくネイティブ クエリを使用して、結合されたエンティティをロードしますか?

4

3 に答える 3

6

MySQL でデータベース全体にクエリを実行する SQL を記述できる場合、この SQL を JPA のネイティブ クエリで使用できます。

ある種のデータベース リンク メカニズムを使用していると思いますか? もしそうなら、これもマッピングできるはずです。リンクされたデータベースの @Table の「スキーマ」をリンク名に設定できます。

すなわち

@Table(name="organizations", schema="org_schema@org_db")
于 2011-05-02T14:09:13.137 に答える
5

できません。各エンティティは永続コンテキストにバインドされ、コンテキストはデータベースにバインドされます。

データベースが同じサーバー上のスキーマを意味する場合、2つのことができます

  • スキーマの 1 つで、他のスキーマのテーブルを指すビューを作成します。欠点は、エンティティを 2 回 (スキーマごとに 1 回) マッピングする必要がある場合があることです。
  • 結合を使用してビューを作成し、そこから必要な値をマップします。欠点は、エンティティが読み取り専用になることです。

両方のスキーマが異なるデータベースにある場合は、コードで手動で結合を行う必要があります。

1 つ質問があります。あなたが言及した「外部キー」は、実際の DB 外部キーまたは論理 FK ですか?

于 2011-05-02T11:25:34.830 に答える
3

次のアプローチを試してみましたが、うまくいくようです。

1) @Table アノテーションに schema 属性がない

2) エンティティが存在するスキーマによってクラブ化されたエンティティに対して、異なる orm ファイルを作成します。

3) 各 orm ファイルで、「my_schema」を追加できます。

4) persistence.xml のそれぞれの PU に orm ファイルを含めます。

5) テスト中に別のデータベースが必要な場合は、テスト用に同様の orm ファイルを作成し、それに応じてスキーマの値を変更し、これらの orm ファイルを別の PU に含めます。

HTH

于 2011-09-29T05:46:06.530 に答える