web-dev-qa-db-ja.com

複数のデータベーススキーマを使用するJPA

JPA/Springを使用する特定の問題で少し問題があります。

エンティティにスキーマを動的に割り当てるにはどうすればよいですか?

スキーマADに属するTABLE1と、BDの下にあるTABLE2があります。

@Entity
@Table(name = "TABLE1", schema="S1D")
...

@Entity
@Table(name = "TABLE2", schema="S2D")
...

スキーマは、環境(Dev/Acc/Prd)に依存するため、アノテーション属性にハードコードされていない場合があります。 (受け入れでは、スキーマはS1AおよびS2Aです)

どうすればこれを達成できますか?このようないくつかの種類のプレースホルダーを指定することは可能ですか?

@Entity
@Table(name = "TABLE1", schema="${schema1}")
...

@Entity
@Table(name = "TABLE2", schema="${schema2}")
...

環境にあるプロパティファイルに基づいてスキーマが置き換えられるようにするには

乾杯

25
javacoder

同じ問題がありましたが、persistence.xmlで解決しました。この場合、必要なorm.xmlファイルを参照して、db shemaを宣言しました。

<persistence
xmlns="http://Java.Sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://Java.Sun.com/xml/ns/persistence http://Java.Sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0" >
<persistence-unit name="schemaOne">
    . . .
    <mapping-file>ormOne.xml</mapping-file>
    . . .
</persistence-unit>

<persistence-unit name="schemaTwo">
    . . .
    <mapping-file>ormTwo.xml</mapping-file>
    . . .
 </persistence-unit>
</persistence>

これで、特別なスキーマのEntityManagerFactoryを作成できます

EntityManagerFactory emf = Persistence.createEntityManagerFactory("schemaOne");
10
carmen_munich

デプロイメントでわかっている場合にできることの1つは、2つのorm.xmlファイルを用意することです。 1つはschema1用、もう1つはschema2用であり、次にpersistence.xmlに2つのpersistence-unitsが定義されています。スキーマなどを変更する必要がある場合、注釈を付けることはアンチパターンです

2
DataNucleus

以下を試してください:

puplic class MyClass {
  public static final String S1D="S1D";
  public static final String S2D="S2D";
}

@Entity
@Table(name = "TABLE1", schema=MyClass.S1D)
...

@Entity
@Table(name = "TABLE2", schema=MyClass.S2D)
...
2
user3092746

データソースを作成すると、接続を初期化して別のスキーマを使用できる場合があります

例えばweblogic用

weblogic/OracleでJDBCプールのデフォルトスキーマを指定

1
Kalpesh Soni

Context.xmlに2つのDataSource宣言(スキーマごとに1つ)を設定し、このデータソースを使用して2つの永続性ユニットを定義できます。その後、context.xmlは、さまざまな環境のアプリサーバーで異なる場合があります。

1
Dominik

アノテーション引数は最終的なものである必要があるため、実行時に変更できません。

0
Nico