Как я могу объединить / расширить единицы персистентности из разных JAR-файлов?

Я использую постоянство JPA для своих моделей данных с Eclipselink в качестве поставщика сохраняемости. У меня есть модульное (OSGi) приложение, и один из модулей содержит стандартную модель данных и модуль персистентности, который автоматически включает все объекты из пакета. Поставщик постоянства находится в другом модуле, который работает хорошо.

Теперь я хочу, чтобы третий модуль добавил некоторые сущности в модуль персистентности. Как я могу это сделать? Я нашел это решение, которое кажется специфическим для Spring, которым я не пользуюсь. Суть этого подхода заключается в написании постпроцессора, который подключается к обработке единицы сохраняемости и вручную объединяет <class> записи из persistence.xml файлы.

Можно ли объединить единицы сохранения? Кто-нибудь может предложить обходной путь?

2 ответа

Решение

Во-первых, вот ссылка на Dynamic-JPA, предлагающую способ динамического обновления сущностей. Я хотел бы изучить этот вариант в первую очередь.


Вот еще одна ссылка ( PDF) от OSGi, есть несколько диаграмм верхнего уровня, посвященных постоянству, и EntityManagerFactory, которые могут быть полезны.


интересный подход, но может быть не связан

Вот ссылка на программное создание модулей персистентности без использования файла persistence.xml (чего на самом деле вы не можете сделать, но ответы дают некоторое представление о проблеме). Филк предлагает, как удалить провайдера из файла persistence.xml. Если вы будете следовать этому методу, вы сможете объединить свои сущности в определенную единицу персистентности.

"Ну, в старые добрые времена Hibernate я мог просто создать сеанс и добавить к нему свои классы на лету. Кажется, он никогда не превращался в спецификации JPA SUN. Однако я полностью удалил провайдера из файла persistence.xml и передал его EL, используя свойства EMF. Кажется, это работает нормально. Единственное, что осталось в файле persistence.xml - это спецификация классов. Я думаю, было бы не сложно представить метод, который анализирует имя класса в EL и создает ClassDescriptor для него как открытый метод поставщика EL JPA. "


Наконец, мы подошли к хакерскому решению, которое уже было предложено, просто отредактируйте ваши файлы persistence.xml по факту. Я считаю, что это будет работать (хотя я не пробовал), но это определенно вариант.

У меня есть настройки, где файл WAR содержит файл persistence.xml. Решение, уже описанное здесь, должно использоваться для JAR, WAR и EAR. JPA 2.0: автоматическое добавление классов сущностей в PersistenceUnit * из разных jar*

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