是否可以在运行时设置持久性单元默认目录

时间:2011-03-25 10:30:20

标签: jpa persistence eclipselink

目前我使用包含目录的表注释

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

但目录名称应该是可配置的。

每个部署都无法更改persistence.xml文件,并且数据源缺省数据库应设置为TempDB。 (另一个进程是经常锁定目录,驱动程序保持对数据源缺省数据库的连接)所以我只能使用传递给EntityManagerFactory的属性来更改缺省目录。

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

是否可以在属性中设置持久性单元默认目录?

我使用eclipselink作为JPA提供商。

1 个答案:

答案 0 :(得分: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);

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