Наследование сущностей


(Максим Павлов) #1

Здравствуйте!

Возникла следующая проблема. Имеются три класса сущностей, наследуемых друг от друга. Например A -> B -> C, где A – самый базовый класс. Кто-то создал экземпляр класса B и посадил его в базу данных. Соответственно появится по одной записи в двух таблицах: в таблице-A и в таблице-B. Теперь необходимо сущность B расширить до сущности C. Не меняя идентификатор, разумеется, т.к. к этому моменту на сущность B могут иметься ссылки из других мест БД.

Как это возможно сделать? Пробовал самые разные варианты, но CUBA настойчиво пытается посадить сущность C во все три таблицы, что приводит к ошибке. Пробовал даже произвести ручной insert в таблицу C (с таким же ID, как у сущности B) и затем подгрузить сущность с помощью DataManager, но DataManager такую сущность в упор не находит.

Заранее спасибо!


(Михаил) #2

Максим, добрый день.
А стратегия какая? Joined, как я понимаю?
Мне кажется вариант с созданием вручную записи в таблице С должен работать. Только еще необходимо изменить DiscriminatorValue.


(Максим Павлов) #3

Добрый день!

Стратегия joined, да. Только не совсем понятно, что вы имеете в виду под “необходимо изменить DiscriminatorValue”? В базовом классе A он равен 0, в классе B равен 1, в классе C равен 3 (не знаю почему так, изначально проектировал сущности не я)


(Михаил) #4

Ну т.е. сейчас для этой запись значение равно 1, вы добавите запись в таблицу С и проапдейтите его до 3.


(Максим Павлов) #5

Да, проапдейтил поле dtype в базовом классе и всё заработало. Спасибо!