Подтвердить что ты не робот

Несколько банок, единое решение для решения задач непрерывности?

Некоторые люди, включая меня, боролись с объединением объектов из разных модулей (банок) в единую единицу непрерывности (особенно с JavaSE, например здесь JPA 2.0: добавление классов сущностей в PersistenceUnit * из разных jar * автоматически). На основе ответов нет простого прямого способа сделать это. Одним из решений является перечислить все классы из всех банок в единичном единичном файле, но это не очень элегантно. Возможно, я случайно нашел другой путь. Как правило, все классы сущностей отображаются с помощью аннотаций. Что касается решения: persistence.xml может содержать несколько файлов сопоставления XML, например:

main.jar META-INF/persistence.xml:

<persistence-unit name="PU" transaction-type="RESOURCE_LOCAL">
  <mapping-file>META-INF/order-mappings.xml</mapping-file>
  <mapping-file>META-INF/customer-mappings.xml</mapping-file>
</persistence-unit>

Файлы сопоставления могут быть помещены в разные банки. Я заметил, что они могут содержать <entity> элементы без каких-либо атрибутов, например:

order.jar! META-INF/порядка mappings.xml

<entity-mappings>       
  <entity class="com.company.Order"></entity>    
</entity-mappings>

Даже если файл сопоставления не отображает никаких атрибутов , аннотации в классе Java все равно учитываются, и все, кажется, работает нормально! Это означало бы легко включить объекты из нескольких банок в единую единицу непрерывности, просто включив файлы сопоставления XML из определенных JAR.

Мой вопрос: это разрешенное использование файла сопоставления JPA или просто побочный эффект моего провайдера непрерывности (Hibernate)?

4b9b3361

Ответ 1

Да, это разрешено спецификацией JPA.

Сопоставления XML-объектов предназначены для переопределения аннотаций JPA. Если вы специально не измените поведение по умолчанию с помощью тега <xml-mapping-metadata-complete/>, поставщик JPA будет использовать аннотации, в которых отсутствует сопоставление XML.

Вот выдержка из JPA 2.0 spec:

12.1 Использование дескриптора XML

... Отсутствие или присутствующий в подклассе xml-mapping-metadata-complete, содержащийся в подэлемент сущностей-сущностей по умолчанию - единица измерения по умолчанию элемент определяет, является ли дескриптор XML-объекта/реляционного сопоставления используется для выборочного переопределения значений аннотации или используется ли оно как полная альтернатива аннотациям метаданных на языке Java.

Если задан полный подэлемент xml-mapping-metadata-complete, полный набор метаданных отображения для единицы персистентности содержится в файлах сопоставления XML для единицы персистентности и любого сохранения аннотации на классы игнорируются.