休眠。无法保存使用classForName生成并声明为其超类的对象(多态性)

问题描述 投票:0回答:1

我有一个声明为抽象的类,许多其他类都从该类继承(我可能未实现某些类)。这些类的名称都有记录,因此,我必须使用“ 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。

java hibernate orm polymorphism hibernate-mapping
1个回答
0
投票

好吧,我的错。如果您不将子类放在映射配置文件中,它将采用父映射。

对不起。

© www.soinside.com 2019 - 2024. All rights reserved.