将托管 class 名称动态添加到 EntityManagerFactory
Dynamically add managed class names to EntityManagerFactory
假设我有一个这样的 persistence.xml 文件:
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="pu" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>entity.E1</class>
<class>entity.E2</class>
<class>entity.E3</class>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:derby:memory:myTestDB;create=true"/>
<property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver"/>
<property name="eclipselink.logging.level" value="WARNING"/>
<property name="eclipselink.canonicalmodel.subpackage" value="test"/>
<property name="javax.persistence.schema-generation.database.action" value="create"/>
</properties>
</persistence-unit>
</persistence>
我知道我可以用这样的代码更改 persistence.xml 文件,但只能更改属性部分:
Properties properties = new Properties();
properties.put("javax.persistence.jdbc.url", "<value>");
properties.put("eclipselink.logging.level", "<value>");
....
emf = Persistence.createEntityManagerFactory("pu", properties);
我可以通过反射获取所有实体 classes,但是如何以类似于我所做的方式动态添加 class 名称(示例中的 E1..E3)对于属性?
我知道 Hibernate 有 a way to do it,但我使用的是 eclipselink。
有没有办法用 eclipselinks JPA 实现来做到这一点?
我原来在这个problem/question上花了很多时间,放弃了原来的想法(动态添加实体类)。
所以如果你看了这个问题,我自己的回答是,我很确定这是做不到的。
假设我有一个这样的 persistence.xml 文件:
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="pu" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>entity.E1</class>
<class>entity.E2</class>
<class>entity.E3</class>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:derby:memory:myTestDB;create=true"/>
<property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver"/>
<property name="eclipselink.logging.level" value="WARNING"/>
<property name="eclipselink.canonicalmodel.subpackage" value="test"/>
<property name="javax.persistence.schema-generation.database.action" value="create"/>
</properties>
</persistence-unit>
</persistence>
我知道我可以用这样的代码更改 persistence.xml 文件,但只能更改属性部分:
Properties properties = new Properties();
properties.put("javax.persistence.jdbc.url", "<value>");
properties.put("eclipselink.logging.level", "<value>");
....
emf = Persistence.createEntityManagerFactory("pu", properties);
我可以通过反射获取所有实体 classes,但是如何以类似于我所做的方式动态添加 class 名称(示例中的 E1..E3)对于属性?
我知道 Hibernate 有 a way to do it,但我使用的是 eclipselink。 有没有办法用 eclipselinks JPA 实现来做到这一点?
我原来在这个problem/question上花了很多时间,放弃了原来的想法(动态添加实体类)。 所以如果你看了这个问题,我自己的回答是,我很确定这是做不到的。