Можно ли сканировать сущности в jar-файлах с использованием JPA и hibernate? - PullRequest
2 голосов
/ 23 марта 2012

У меня следующая ситуация:

  • Проект A - содержит несколько объектов и является независимым
  • Проект B - Содержит несколько объектов и является независимым
  • Проект C - содержит несколько объектов и зависит от проекта A и проекта B.

Я использую Maven для управления зависимостями и сборками.

Когда я пытаюсь протестировать проект A и проектВ это хорошо проходит.Каждый из них имеет файл persistence.xml и отдельный постоянный контекст.

Когда я запускаю Project C, он сопоставляет любую из сущностей.Я попытался использовать автоопределение, указал атрибут файла jar ... но, похоже, ничего не работает.

Это дает мне исключение Mapping, говорящее о неизвестном объекте, и не будет сохраняться или читать объекты из проектов A илиБ. Я разместил здесь 3 файла 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
 http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
    <persistence-unit name="A" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <properties>
      <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle9Dialect"/>
    <property name="hibernate.connection.driver_class" value="oracle.jdbc.OracleDriver"/>
      <property name="hibernate.show_sql" value="true"/>
      <property name="hibernate.connection.username" value="username"/>
      <property name="hibernate.connection.password" value="password"/>
      <property name="hibernate.connection.url" value="jdbc:oracle:thin:@webdev.epi.web:1521/webdev.world"/>
      <property name="hibernate.max_fetch_depth" value="3"/>
      <property name="hibernate.archive.autodetection" value="class"/>
    </properties>

        </persistence-unit>
</persistence>

<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
 http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
    <persistence-unit name="B" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <properties>
      <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle9Dialect"/>
    <property name="hibernate.connection.driver_class" value="oracle.jdbc.OracleDriver"/>
      <property name="hibernate.show_sql" value="true"/>
      <property name="hibernate.connection.username" value="username"/>
      <property name="hibernate.connection.password" value="password"/>
      <property name="hibernate.connection.url" value="jdbc:oracle:thin:@webdev.epi.web:1521/webdev.world"/>
      <property name="hibernate.max_fetch_depth" value="3"/>
      <property name="hibernate.archive.autodetection" value="class"/>
    </properties>

        </persistence-unit>
</persistence>

<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
 http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
    <persistence-unit name="C" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <jar-file>A-0.0.1-SNAPSHOT.jar</jar-file>
                    <jar-file>B-0.0.1-SNAPSHOT.jar</jar-file>
        <properties>
      <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle9Dialect"/>
    <property name="hibernate.connection.driver_class" value="oracle.jdbc.OracleDriver"/>
      <property name="hibernate.show_sql" value="true"/>
      <property name="hibernate.connection.username" value="username"/>
      <property name="hibernate.connection.password" value="password"/>
      <property name="hibernate.connection.url" value="jdbc:oracle:thin:@webdev.epi.web:1521/webdev.world"/>
      <property name="hibernate.max_fetch_depth" value="3"/>
      <property name="hibernate.archive.autodetection" value="class"/>
    </properties>

        </persistence-unit>
</persistence>

Ответы [ 2 ]

1 голос
/ 23 марта 2012

На самом деле, я нашел способ заставить его работать. В проектах A и B я автоматически определяю свои сущности, а в Project C я явно перечисляю сопоставленные классы, сущности теперь отображаются и все работает.

Надеюсь, это поможет кому-то еще!

0 голосов
/ 25 января 2017

Чтобы включить автоопределение и в вашем проекте C, вы можете самостоятельно сканировать путь к классам и программно регистрировать объекты JPA в Hibernate. Таким образом, нет необходимости явно перечислять эти объекты в файле persistence.xml. Для получения дополнительной информации см. Здесь: https://stackoverflow.com/a/41845759/377320

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...