目前我使用包含目录的表注释
@Table(catalog = "Mycatalog", schema = "MySchema", name = "MyTable")
但目录名称应该是可配置的。
每个部署都无法更改persistence.xml文件,并且数据源缺省数据库应设置为TempDB。 (另一个进程是经常锁定目录,驱动程序保持对数据源缺省数据库的连接)所以我只能使用传递给EntityManagerFactory的属性来更改缺省目录。
EntityManagerFactory emf = provider.createEntityManagerFactory(
"default", properties);
是否可以在属性中设置持久性单元默认目录?
我使用eclipselink作为JPA提供商。
答案 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);
这样我可以在运行时更改目录之间(但我仍然无法在运行时添加新目录)。