Отделите банку объектов JPA из persistence.xml в среде SE

Существует ли способ снова использовать банку с аннотируемыми объектами JPA больше чем в одном приложении SE (как зависимость)? <файл банки> в persistence.xml не поддерживается в средах SE так там иначе?

13
задан Pascal Thivent 9 May 2010 в 13:52
поделиться

2 ответа

Официально (согласно спецификации) вы должны указать все классы с помощью элемента class . Цитата из главы 6.2.1.6 файл сопоставления, файл jar, класс, исключить-неуказанные-классы из JSR-220 :

Список именованных классов управляемой сохраняемости может также должны быть указаны вместо или в дополнение к файлам JAR и файлам сопоставления. Любые аннотации метаданных сопоставления, найденные в этих классах, будут обработаны, или они будут сопоставлены с использованием значений по умолчанию для аннотаций сопоставления. Элемент class используется для перечисления управляемого класса сохраняемости. Список всех именованных классов управляемой сохраняемости должен быть указан в средах Java SE для обеспечения переносимости . Переносимые приложения Java SE не должны полагаться на другие описанные здесь механизмы для определения управляемых классов сохраняемости единицы сохраняемости. Поставщики сохраняемости могут также потребовать, чтобы набор классов сущностей и классов, которыми нужно управлять, должен быть полностью перечислен в каждом из файлов persistence.xml в средах Java SE.

Теперь, если вы не против того, чтобы его не переносили, Hibernate поддерживает с использованием элемента jar-file в Java SE (в этом случае необходим абсолютный URL-адрес, а не удобный ). На самом деле Hibernate также поддерживает автоматическое обнаружение даже в JSE. Намного лучше:

<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="foo">

    <!-- This is required to be spec compliant, Hibernate however supports auto-detection even in JSE. -->
    <class>foo.Bar<class>

    <properties>
      <!-- Scan for annotated classes and Hibernate mapping XML files -->
      <property name="hibernate.archive.autodetection" value="class, hbm"/>
      ...
    </properties>
  </persistence-unit>

</persistence>
6
ответ дан 2 December 2019 в 01:10
поделиться

Насколько я знаю, нет способа заставить класс, сканирующий аннотации, работать в такой конфигурации. Однако вы можете явно указать ваш файл 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="punit">

    <provider>org.hibernate.ejb.HibernatePersistence</provider>

    <jta-data-source>java:/myDS</jta-data-source>

    <!-- Must be explicit as classes are in separate jar -->
    <class>com.foo.Bar</class>
    <class>com.foo.Baz</class>

    <properties/>      
  </persistence-unit>

</persistence>
2
ответ дан 2 December 2019 в 01:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: