如何在java中从父类对象加载子对象

如何在java中从父类对象加载子对象,java,hibernate,class,jakarta-ee,inheritance,Java,Hibernate,Class,Jakarta Ee,Inheritance,我有这门课 interface用户界面 然后 抽象类用户实现用户界面 然后我有两个儿童班 班主任扩展用户 类父级扩展用户 现在在数据库中,我有三张桌子 带有id、密码的用户表 带FK和其他东西的老师 带FK和其他东西的家长 现在我正在使用User类检查登录 我的问题是,如果员工登录,那么内存中的对象将是用户类型。那么我如何才能获得Employee对象呢 我的模型错了吗?我需要用不同的方法吗?假设Employee是用户的第三个子类,那么如果用户登录,并且您使用Hibernate从数据库中获取该用户

我有这门课

interface用户界面

然后

抽象类用户实现用户界面

然后我有两个儿童班

班主任扩展用户

类父级扩展用户

现在在数据库中,我有三张桌子

  • 带有id、密码的用户表
  • 带FK和其他东西的老师
  • 带FK和其他东西的家长
  • 现在我正在使用User类检查登录

    我的问题是,如果员工登录,那么内存中的对象将是用户类型。那么我如何才能获得Employee对象呢


    我的模型错了吗?我需要用不同的方法吗?

    假设Employee是用户的第三个子类,那么如果用户登录,并且您使用Hibernate从数据库中获取该用户,而该用户实际上是一名雇员,则Hibernate将返回一个Employee实例。正如你所期望的那样


    如果没有,则说明您做错了什么,但是如果不看到代码就无法判断。

    假设Employee是用户的第三个子类,那么如果用户登录,并且您使用Hibernate从数据库中获取该用户,而该用户实际上是一名雇员,则Hibernate将返回一个Employee实例。正如你所期望的那样


    如果没有,那么您就做错了,但是如果不看代码就无法判断。

    如果您向hibernate请求类型为
    User
    的对象,您最终总会得到一个
    UserEnhancedByCGLib
    (或类似的东西)。你不能(原则上)把那件事归咎于
    老师
    家长

    解决这个问题有两种选择

    1) 在登录时,您知道用户实际上是教师/家长,而不是最初向hibernate请求教师/家长对象,而不是用户对象

    2) 登录时您不知道,一旦您确实需要教师/家长的专业化,您就必须使用用户对象并对数据库进行第二次查询

    第二种方法是:

    public Object refresh(Object object) {
        if (object != null) {
            if (object instanceof HibernateProxy) {
                return ((HibernateProxy) object).getHibernateLazyInitializer().getImplementation();
            }
        }
        return object;
    }
    

    这将(如果内存可用)为您提供一个具体的类,而不是一个分离的对象。

    如果您向hibernate请求一个类型为
    User
    的对象,您将始终得到一个
    UserEnhancedByCGLib
    (或类似的东西)。你不能(原则上)把那件事归咎于
    老师
    家长

    解决这个问题有两种选择

    1) 在登录时,您知道用户实际上是教师/家长,而不是最初向hibernate请求教师/家长对象,而不是用户对象

    2) 登录时您不知道,一旦您确实需要教师/家长的专业化,您就必须使用用户对象并对数据库进行第二次查询

    第二种方法是:

    public Object refresh(Object object) {
        if (object != null) {
            if (object instanceof HibernateProxy) {
                return ((HibernateProxy) object).getHibernateLazyInitializer().getImplementation();
            }
        }
        return object;
    }
    
    这将(如果内存可用)给你一个具体的类,但一个分离的对象