gpt4 book ai didi

java - hibernate 。无法保存使用 classForName 生成并声明为其父类(super class)的对象(多态性)

转载 作者:行者123 更新时间:2023-12-01 18:06:06 24 4
gpt4 key购买 nike

我有一个类声明为抽象类,许多其他类都继承自该类(有些类可能尚未由我实现)。这些类有名称记录,因此,我必须使用“classForName”实例化它们,将它们声明为它们的父类(super class):

//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).

嗯,我可以使用父类(super class)的已知方法。将数据保存到数据库时就会出现问题。我知道 Hibernate 支持多态性,但我开始怀疑我是否能忍受这种方式,因为它总是将对象保持为“ParentClass”类型,并且我丢失了关于它们的类型(我想从数据库加载对象作为其子类型,特别是因为“ParentClass”是抽象的)。我已经尝试了一切,Hibernate 中所有类型的继承(JOIN、SINGLE_TABLE ...),但没有办法。

有没有办法保存有关调用对象类型的信息?我知道当您将对象声明为子类时可以做到这一点:

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

...但我还没有找到任何关于这种声明对象的方式。

非常感谢您的帮助

J.

最佳答案

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

抱歉。

关于java - hibernate 。无法保存使用 classForName 生成并声明为其父类(super class)的对象(多态性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60555801/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com