У меня есть класс, объявленный как абстрактный, от которого наследуются многие другие классы (некоторые могут быть не реализованы мной). Существует запись имен для этих классов, и поэтому мне нужно создать их экземпляр с помощью "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.