2015-10-09 1 views
0

У меня есть модуль с persistence.xml для нескольких классов. У меня есть приложение, которое использует этот модуль, но хочет увеличить этот EntityManagerFactory несколькими другими классами, которые являются специфическими для этого приложения и не входят в модуль.Как создать экземпляр EntityManagerFactory, который добавляет persistence.xml с дополнительными классами?

Если я создаю файл persistence.xml в приложении, который переопределяет блок персистентности, он не работает надежно (он работает при запуске из отладчика IntelliJ, но не работает при вызове с использованием пакета maven appassemble), потому что кажется, что правила, определяющие, какие из файлов persistence.xml в различных банках вступают в силу, находятся вне моего понимания и, вероятно, трудно контролировать.

Если я создаю второй блок сохранения, содержащий только новые таблицы, тогда мне понадобится несколько EntityManagerFactory-s для извлечения различных типов объектов в JPA. В настоящее время мне не нужно выполнять запросы, которые объединяют объекты из библиотечного модуля с объектами, специфичными для модуля приложения, но я уверен, что было бы невозможно, если бы объекты находились в разных единицах сохранения.

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

В чем опасность, если у вас есть единицы непрерывности, которые перекрываются? (обе единицы имеют объекты, сопоставленные с одной и той же таблицей в одной и той же базе данных)

Каковы правильные рекомендации по работе с единицами сохранения из нескольких .jars?

ответ

0

Используя стандартную функциональность JPA, нет средств для предоставления дополнительных классов сущностей во время выполнения.

Подход, который я рекомендую, заключается в удалении persistence.xml из ваших модулей и создании orm files, которые содержат те же объекты, что и исходные файлы persistence.xml.

Затем создайте единицу непрерывности в приложении и включите orm-файлы из всех необходимых модулей.

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

Таким образом, вы получаете единый блок непрерывности и все еще обладаете модульными и расширяемыми наборами объектов.

+0

Может потребоваться некоторое время, чтобы выяснить, как реализовать eclipselink и интегрировать его с maven. –