Динамически добавлять имена управляемых классов в EntityManagerFactory - PullRequest
0 голосов
/ 07 апреля 2019

Скажем, у меня есть файл 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);

Я могу получить все классы сущностей с помощью отражения, но как я могу динамически добавлять имена классов (E1..E3 в примере) так же, как я сделал для свойств?

Я знаю, что у Hibernate есть способ сделать это , но я использую eclipselink. Есть ли способ сделать это с помощью JPA-реализации eclipselinks?

1 Ответ

0 голосов
/ 21 июня 2019

Изначально я потратил много времени на эту проблему / вопрос и разочаровался в своей первоначальной идее (динамически добавлять классы сущностей). Поэтому, если вы прочитаете этот вопрос, я отвечу так: я почти уверен, что это невозможно.

...