определить классы сущностей jpa вне файла persistence.xml - PullRequest
3 голосов
/ 23 сентября 2010

Есть ли способ определить классы сущностей jpa вне файла persistence.xml (то есть в отдельном файле)?

Будет также недостаточно иметь файл Persistence.xml в качестве внешнего файла.

Заранее спасибо, Стивен

Редактировать: Извините, я не ясно.Это в среде Java SE.Кроме того, я хотел бы, чтобы в моем файле persistence.xml не было листинга some.class.AClass.Это потому, что я хотел бы создать этот список классов динамически и ссылаться на файл, содержащий этот список.

Edit2: удалось решить эту проблему, написав файл persistence.xml во время сборки перед его упаковкой.Если кому-то интересно, я использовал сканнотации, чтобы обнаружить все классы, аннотированные @Entity, и записал их в файл persistence.xml в target / classes / META-INF (используя maven).

Ответы [ 2 ]

4 голосов
/ 23 сентября 2010

В среде Java SE переносимые приложения должны явно перечислять классы в persistence.xml.Из спецификации JPA 1.0:

6.2.1.6 mapping-file, jar-file, class, exclude-unlisted-classes

Следующие классы должны быть неявно или явно обозначены как управляемыеклассы постоянства, которые должны быть включены в единицу хранения: классы сущностей;встраиваемые классы;сопоставленные суперклассы.

Набор управляемых классов персистентности, управляемых блоком персистентности, определяется с помощью одного или нескольких из следующих элементов:

  • Один или несколько файлов XML объектного / реляционного сопоставления
  • Один или несколько jar-файлов, в которых будут выполняться поиск классов
  • Явный список классов
  • Аннотированные управляемые классы персистентности, содержащиеся в корне единицы сохраняемости (если только *Указан элемент 1020 *)

(...)

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

Все классы, содержащиеся в корнемодуля постоянства также выполняется поиск аннотированных управляемых классов сохраняемости, и любые найденные в них аннотации метаданных сопоставления будут обрабатываться или сопоставляться с использованием значений аннотаций сопоставления по умолчанию.Если не предполагается, что аннотированные классы постоянства, содержащиеся в корне модуля постоянства, должны быть включены в модуль сохранения, следует использовать элемент exclude-unlisted-classes. Элемент exclude-unlisted-classes не предназначен для использования в средах Java SE.

Результирующий набор объектов, управляемых модулем постоянства, представляет собой объединение этих источников с аннотациями метаданных отображения (или значения по умолчанию для аннотаций) для любого данного класса, переопределяемого информационным файлом сопоставления XML, если для этого класса имеются как аннотации, так и сопоставления XML.Минимальный переносимый уровень переопределения находится на уровне постоянного поля или свойства.

Если переносимость не имеет значения, некоторые поставщики поддерживают обнаружение объектов в среде Java SE (например, EclipseLink, Hibernate ).

Если переносимость вызывает беспокойство, использование стороннего контейнера, такого как Spring, поможет.

0 голосов
/ 23 сентября 2010

Если вы хотите и можете упаковать свои классы сущностей в файл JAR вместе с файлом persistence.xml, вам не нужно перечислять каждую сущность в элементе <class>.Когда JAR развертывается с файлом persistence.xml в каталоге META-INF, во время выполнения будет производиться поиск JAR для любых классов, имеющих аннотацию @Entity.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...