Множество банок, решение с единым постоянным блоком?

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

Другие вопросы по тегам