JPA различает идентификатор GenerationType с использованием наследования

У меня есть две разные базы данных D1, D2 с одной и той же таблицей T.

T имеет идентификатор столбца первичного ключа, который автоматически генерируется в D1, простое целое число в D2. Мне нужно сместить запись с T в D1 на T в D2, поэтому я сопоставил T как @Entity с JPA. Проблема в том, что @ID — это @GeneratedValue(strategy = GenerationType.IDENTITY) для D1, но не для D2.

Есть ли решение не дублировать Entity? Я заметил, что при использовании @MappedSuperclass мне нужен столбец @Id, но в моем случае это то, что я пытаюсь специализировать. Единственное решение, которое я нашел, - создать два разных класса, ссылающихся на одну и ту же таблицу, которые идентичны, за исключением @id... что-нибудь лучше?

(если я использую общий абстрактный класс, у меня возникают проблемы при определении @NamedQueries, потому что кажется, что на унаследованное поле нельзя ссылаться (SELECT m FROM Specialized m WHERE m.aBaseField=:aBaseField) вернуть исключение: «Путь к полю состояния» m.aBaseField' не может быть разрешен к допустимому типу."


person Francesco Umani    schedule 06.08.2013    source источник


Ответы (2)


Я бы определил две разные единицы персистентности, по одной для каждой базы данных. Затем вы можете настроить его с помощью файла orm.xml.

person James    schedule 07.08.2013
comment
Спасибо, Джеймс, я использую аннотацию, но думаю, что это то же самое. У меня просто есть две единицы персистентности, поэтому дублирование класса сущностей или orm.xml — это решение, но грязное :). - person Francesco Umani; 07.08.2013

Я не нашел реального решения. В итоге я продублировал класс, предоставляющий разные @Entity(name="name1") и удалив для одного из них аннотацию @GenerationType. В блоке постоянства я использую то или другое в зависимости от того, что я собираюсь делать.

person Francesco Umani    schedule 08.08.2013