JPA дифференцирующий идентификатор GenerationType с использованием наследования
У меня есть две разные базы данных D1, D2 с той же таблицей T.
T имеет идентификатор столбца первичного ключа, который автоматически генерируется в D1, простое целое число в D2. Я должен перенести запись с T в D1 на T в D2, поэтому я сопоставил T как @Entity с JPA. Проблема в том, что @ID является @GeneratedValue(стратегии = GenerationType.IDENTITY) для D1, но не для D2.
Есть ли решение не дублировать сущность? Я заметил, что при использовании @MappedSuperclass мне нужен столбец @Id, но в моем случае это то, что я пытаюсь специализировать. Единственное решение, которое я нашел, - это сгенерировать два разных класса, ссылающихся на одну и ту же таблицу, которые идентичны, кроме @id... что-нибудь лучше?
(если я использую общий абстрактный класс, у меня возникают проблемы при определении @NamedQueries, потому что кажется, что на унаследованное поле нельзя ссылаться (SELECT m FROM Specialized m WHERE m.aBaseField=:aBaseField) возвращает исключение: "Путь поля состояния" m.aBaseField 'не может быть преобразован в допустимый тип. "
2 ответа
Я не нашел реального решения. Я закончил с тем, чтобы продублировать класс, предоставив другой @Entity(name="name1") и удалив для одного из них аннотацию @GenerationType. В единице постоянства я использую одно или другое в соответствии с тем, что я собираюсь сделать.
Я бы определил два разных постоянных модуля, по одному для каждой базы данных. Затем вы можете настроить его с помощью файла orm.xml.