2013-08-06 3 views
0

У меня есть два различных баз данных D1, D2 с тем же таблицей Т.JPA дифференциации ID GenerationType с использованием наследования

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

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

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

ответ

0

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

1

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

+0

Спасибо, Джеймс, я использую аннотацию, но я думаю, что это то же самое. У меня только две единицы персистентности, поэтому дублирование класса сущности или orm.xml - это решение, но грязное :). –

Смежные вопросы