Hibernate. Невозможно сохранить объект, созданный с помощью classForName и объявленный как его суперкласс (Полиморфизм) - PullRequest
0 голосов
/ 06 марта 2020

У меня есть класс, объявленный как абстрактный, от которого наследуются многие другие классы (некоторые могут быть не реализованы мной). Существует запись имен для этих классов, и поэтому мне нужно создать их экземпляр с помощью "classForName", объявив их в качестве суперкласса:

//ParentClass is abstract. ChildClass extends and implements ParentClass.
    Class classLoader = Class.forName(name); //name is "ChildClass", that extends ParentClass.
    ParentClass object = (ParentClass)classLoader.newInstance(); //A ChildClass Object casted as its Parent class (ParentClass).

Хорошо, я могу использовать известные методы суперкласса , Проблема возникает при сохранении данных в базе данных. Я знаю, что Hibernate поддерживает полиморфизм, но я начинаю сомневаться, что могу это выдержать, потому что он всегда сохраняет объекты, как если бы они были типа "ParentClass" , и я теряю ссылку на типа они были (я хочу загрузить объекты из базы данных в качестве ее подтипа, особенно потому, что "ParentClass" является абстрактным). Я перепробовал все, все типы наследования в Hibernate (JOIN, SINGLE_TABLE ...), и не было никакого способа.

Есть ли способ сохранить информацию о типе вызываемого объекта? Я знаю, что вы можете сделать это, когда вы объявите объект как подкласс:

ChildClass obj = new ChildClass(); //Works fine. You can see difference with my case above

... но я ничего не нашел об этом способе объявления объекта.

Я действительно ценю ваше помощь

J.

1 Ответ

0 голосов
/ 06 марта 2020

Хорошо, моя ошибка. Если вы не помещаете дочерний класс в файл конфигурации сопоставления, он принимает родительское сопоставление.

Извините за это.

...