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

时间:2012-07-19 06:48:23

标签: java hibernate class java-ee inheritance

我有这个课程

interface UserInterface

然后

abstract class user implements UserInterface

然后我有两个子课

Class Teacher extends User

Class Parent extends User

现在在dtabase中我有三个表

  1. user table with id,password
  2. teacher with FK and other stuff
  3. parent with FK and other stuff
  4. 现在我正在使用User class检查登录。

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

    我的模特是错的,我需要采取不同的方式吗?

2 个答案:

答案 0 :(得分:1)

假设Employee是User的第三个子类,那么如果用户登录,并且您使用Hibernate从数据库获得此用户,并且该用户实际上是一名员工,那么Hibernate将返回一个Employee实例。它的工作方式与您期望的一样。

如果没有,那么你做错了什么,但没有看到代码就无法分辨。

答案 1 :(得分:0)

如果你向hibernate询问User类型的对象,你总会得到UserEnhancedByCGLib(或类似的东西)。你不能(原则上)将那个投射到TeacherParent

解决这个问题有两种选择。

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

2)您在登录时不知道,您需要使用User对象,并在实际需要教师/父级专业化后再对数据库进行第二次查询。

第二种方法是:

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

将(如果内存服务)将为您提供具体类但是分离对象。