2009-08-19 117 views
23

我有一點麻煩,使用JPA /春一個特殊的問題:JPA使用多個數據庫模式

我怎麼能動態架構分配到實體?

我們有TABLE1屬於在BD下的模式AD和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}") 
... 

,這樣的模式是基於居住在環境中的屬性文件替換?

乾杯

回答

8

我有我解決了,隨着我指的是需要orm.xml中的文件中我一個persistence.xml中同樣的問題宣佈分貝瑪

<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"); 
+0

什麼樣,如果有ormOne和OrmTwo之間的關係? – 2017-09-25 13:09:15

2

一件事,如果你知道在部署中,可以做的是有2頁orm.xml中的文件。一個用於schema1,另一個用於schema2,然後用於persistence.xml,您定義了2個持久性單元。如果需要更改模式

0

註釋參數必須是最終的,因此不能在運行時更改,因此放置註釋是一種反模式。

ň

1

你可以在你的context.xml 2點的DataSource聲明(每個模式),並定義使用此數據源的兩種持久性單位。 context.xml可以在不同環境的appservers上有所不同。

2

嘗試以下操作:

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) 
... 
相關問題