2011-03-25 100 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); 

这样我可以在运行时在目录之间切换(但我仍然无法在运行时添加新的目录)。