Мы разрабатываем веб-приложение для Spring, Hibernate и Maven в очень модульной форме.Есть основные проекты, определяющие доступ к данным и просматривающие определенные вещи, затем есть модули, определяющие логику и сущности (@Entity
), и затем есть веб-приложение, определяющее контроллер и представление.
Теперь у нас есть модуль безопасности, определяющий безопасностьсущности, такие как account и role, и у нас есть модуль-прототип, определяющий некоторые примерные сущности, такие как customer и order.Оба имеют PersistenceUnit
, определенный внутри persistence.xml
, который в значительной степени пуст, за исключением имени PersistenceUnit, поскольку вся конфигурация базы данных выполняется в веб-приложении с помощью datasource.xml.Предполагается, что веб-приложение загружает оба jar-файла в виде зависимостей maven.
Оба проекта будут нормально работать, автоматически сканируя все объекты и создавая их для соответствующих модульных тестов.Они также будут успешно загружены в веб-приложение, если они будут добавлены по отдельности.
Однако, как только оба загружаются одновременно, второй переопределит PersistenceUnit
первого и, таким образом, создаст IllegalArgumentException : Not an entity
для всех сущностей из первого.Если оба проекта имеют разные единицы сохраняемости, загрузка веб-приложения вызовет еще одно исключение, в котором будет указано no single default persistence unit
.
Итак ... как я могу получить все @Entity
аннотированные классы для загрузки в моем веб-приложениибез необходимости определять их все внутри persistence.xml
(например, здесь ), а скорее через компонентное сканирование? Это кажется идеей, хотя я не знаю, как его использовать и протестировать ...
Я думаю, что нам нужно либо объединить все элементы PersistenceUnits внутри веб-приложения, либо загрузить все сущностипрограммно.Определение их жестко закодировано в файле persistence.xml для нас не вариант.