gpt4 book ai didi

java反射superClass被hibernate加载的问题

转载 作者:行者123 更新时间:2023-11-30 04:27:19 24 4
gpt4 key购买 nike

我试图在控制台中打印我稍后计算所需的父类(super class)字段的名称,当它是一个简单的 POJO 时工作正常,但是当该类之前由 Hibernate 加载时,我得到的子字段不是父类(super class),当我打印父类的名称时(当由 Hibernate 加载时,我得到以下内容)

[handler,_filter_signature,serialVersionUID,方法]

这是我的代码

public static void main(String[] args)
{
FixingModels clazz = new FixingModels();
HibernateHandler handler = new HibernateHandler(true);
Student student = (Student)handler.getSession().load(Student.class,1);
Student newStudent = new Student();
System.out.println("Printing Class loaded by Hibernate");
clazz.showFieldsFromSuperClass(student);//show the Fields of the Child and parent wrong
System.out.println("--------------------------------------------------");
System.out.println("Printing Class instance by new..");
clazz.showFieldsFromSuperClass(newStudent);//Show the fields from the parent and child IS O.K
}
private void showFieldsFromSuperClass(Student clazz)
{
final Class objectClass = clazz.getClass();
final Class parentClass = objectClass.getSuperclass();
System.out.println("Printing Child");
for(Field field:objectClass.getDeclaredFields())System.out.println(field.getName());//printing child
System.out.println("Printing Parent");
for(Field field:parentClass.getDeclaredFields())System.out.println(field.getName());//printing parent
}

第一次

clazz.showFieldsFromSuperClass(student);

被调用的是打印[handler,_filter_signature,serialVersionUID,方法],稍后子级的字段就像hibernate现在是我的学生类的父类而不是代码中的抽象类。稍后

clazz.showFieldsFromSuperClass(newStudent);

正在打印正确的字段,即学生字段以及本例中的父 Person

我的问题是,每当来自 hibernate 或 Spring 容器的新实例时,如何获取 Person 类字段[Parent Class]??

最佳答案

Hibernate load() 方法不会完全初始化检索到的对象,而是返回一个代理,直到您访问对象属性为止。

您可以获取对象的正确Class,而无需使用特殊的 hibernate 帮助器类对其进行初始化:

HibernateProxyHelper.getClassWithoutInitializingProxy(student);

关于java反射superClass被hibernate加载的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15535767/

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