1

我有这门课

interface UserInterface

然后

abstract class user implements UserInterface

然后我有两个孩子班

Class Teacher extends User

Class Parent extends User

现在在数据库中我有三个表

  1. user table with id,password
  2. teacher with FK and other stuff
  3. parent with FK and other stuff

现在我正在使用 User 类检查登录。

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

我的模型错了吗,我需要采取不同的方式吗?

4

2 回答 2

1

假设 Employee 是 User 的第三个子类,那么如果一个用户登录,并且你使用 Hibernate 从数据库中获取了这个用户,而这个用户实际上是一个员工,那么 Hibernate 将返回一个 Employee 实例。它可以按您的预期工作。

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

于 2012-07-19T07:10:43.917 回答
0

如果你向 hibernate 询问 type 的 Object User,你总是会得到 a UserEnhancedByCGLib(或类似的东西)。您不能(原则上)将其转换为 aTeacher或 a Parent

你有两个选择来解决这个问题。

1)您在登录时知道用户实际上是教师/家长,而不是您最初向休眠询问教师/家长对象而不是用户对象。

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

第 2 项的一种方法是:

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

哪个(如果有记忆的话)会给你一个具体的类,但一个分离的对象。

于 2012-07-19T07:22:04.567 回答