Я разрабатываю инструмент, который обрабатывает некоторые объекты базы данных, используя JPA2, с hibernate в качестве поставщика сохраняемости.Инструмент является универсальным и не связан с какой-либо бизнес-логикой, для его работы требуется универсальный параметр Class<? extends Task>
, где Task - это интерфейс, который я создал, чтобы сказать, что реализующий объект имеет некоторое поведение, интересное моему инструменту.Работа инструмента включает получение экземпляров данного класса из базы данных и манипулирование некоторыми из их свойств.Это универсальный инструмент, потому что он разрабатывается для многократного использования, и у нас есть большой набор классов сущностей (но не все классы сущностей), которые реализуют этот интерфейс (в основном те сущности, которые моделируют некоторые типы работающих бизнес-задач).
Чтобы выполнить работу инструмента, мне нужно получить EntityManager
для данного класса.Чтобы получить EntityManager
, мне нужно EntityManagerFactory
.Чтобы получить EntityManagerFactory
, мне нужно имя единицы персистентности.
Итак, моя проблема в том, что с учетом класса сущности получить имя его единицы персистентности.Однако я не нашел никакого способа сделать это без уже существующего EntityManager для этого модуля персистентности, который создает проблему «курица или яйцо сначала, ключ заблокирован внутри сундука».
Частичноерешение состоит в том, чтобы передать имя единицы постоянства вместе с классом сущности, но это выглядит неправильно, поскольку имя единицы постоянства должно быть выведено (или, по крайней мере, предположено) из данного класса.Это можно было бы оптимизировать, добавив имя в аннотацию к классу сущностей, но это все равно выглядит как неправильное решение.Поиск и анализ файла persistence.xml
- это то, чего мы действительно хотим избежать.
Итак, что я могу сделать, чтобы решить эту проблему?Есть идеи?