2011-03-25 97 views
0

設置持久性單元,默認目錄爲我用包含目錄是否有可能在運行時

@Table(catalog = "Mycatalog", schema = "MySchema", name = "MyTable") 

但目錄名稱應配置表中標註的時刻。

每個部署都無法更改persistence.xml文件,並且數據源默認數據庫應該設置爲TempDB。 (另一個過程是經常鎖定目錄,並且驅動程序保持與數據源默認數據庫的連接),所以我僅限於使用傳遞給EntityManagerFactory的屬性更改默認目錄。

EntityManagerFactory emf = provider.createEntityManagerFactory(
       "default", properties); 

是否可以在屬性中設置持久性單元默認目錄?

我使用eclipselink作爲JPA提供程序。

回答

0

我能夠使用不同的目錄,只要它們在XML配置文件中即可。

首先,我從我的實體類中刪除了所有的@Table註解,並創建了兩個orm文件。

的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 persistence_1_0.xsd" 
    version="1.0"> 
    <persistence-unit name="storeone" transaction-type="RESOURCE_LOCAL"> 
     <mapping-file>META-INF/orm-storeone.xml</mapping-file> 
    </persistence-unit> 

    <persistence-unit name="storetwo" transaction-type="RESOURCE_LOCAL"> 
     <mapping-file>META-INF/orm-storetwo.xml</mapping-file> 
    </persistence-unit> 
</persistence> 

ORM-storeone-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"> 

    <entity class="com.package.EntityClass"> 
     <table catalog="SomeCatalog" schema="SomeSchema" name="SomeTable" /> 
    </entity> 
</entity-mappings> 

然後在創建我的EntityManager的代碼我能夠在兩個目錄之間進行選擇。

String persistencUnitName = "storeone"; 
EntityManagerFactory emf = provider.createEntityManagerFactory(
       persistencUnitName , map); 

這樣我可以在運行時在目錄之間切換(但我仍然無法在運行時添加新的目錄)。