Несколько банок, единое решение для решения задач непрерывности?
Некоторые люди, включая меня, боролись с объединением объектов из разных модулей (банок) в единую единицу непрерывности (особенно с 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)?
Ответы
Ответ 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 для единицы персистентности и любого сохранения аннотации на классы игнорируются.