Множество банок, решение с единым постоянным блоком?
Некоторые люди, в том числе и я, боролись за объединение сущностей из разных модулей (jar-файлов) в одну единицу сохраняемости (особенно в JavaSE, например, здесь JPA 2.0: автоматическое добавление классов сущностей в PersistenceUnit * из разных jar*). Исходя из ответов, простого прямого способа сделать это не существует. Одно из решений состоит в том, чтобы перечислить все классы из всех 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 все равно учитываются, и кажется, что все работает просто отлично! Это означает, что можно легко включить объекты из нескольких jar-файлов в один постоянный модуль, просто включив файлы сопоставления XML из определенных JAR-файлов.
У меня такой вопрос: это разрешенное использование файла сопоставления JPA или просто побочный эффект моего поставщика сохраняемости (Hibernate)?
1 ответ
Да, это разрешено спецификацией JPA.
Отображения сущностей XML предназначены для переопределения аннотаций JPA. Если вы специально не измените поведение по умолчанию, используя <xml-mapping-metadata-complete/>
В теге JPA-провайдер будет использовать аннотации там, где нет сопоставления XML.
Вот выдержка из спецификации JPA 2.0:
12.1 Использование XML-дескриптора
... Отсутствие или наличие подэлемента xml-mapping-metadata-complete, содержащегося в подэлементе persistence-unit-defaults элемента entity-mappings, определяет, используется ли дескриптор объекта / реляционного сопоставления XML для выборочного переопределения значений аннотаций или он служит полной альтернативой аннотациям метаданных языка Java.
Если указан подэлемент xml-mapping-metadata-complete, полный набор метаданных отображения для единицы сохраняемости содержится в файлах сопоставления XML для единицы постоянства, и любые аннотации постоянства в классах игнорируются.