【问题标题】:How to load child object from parent class object in java如何在java中从父类对象加载子对象
【发布时间】:2012-07-19 06:48:22
【问题描述】:

我有这门课

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 对象

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

【问题讨论】:

    标签: java hibernate class jakarta-ee inheritance


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      如果你向 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;
      }
      

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

      【讨论】:

        猜你喜欢
        • 2010-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-15
        • 1970-01-01
        • 1970-01-01
        • 2017-07-14
        • 2020-09-11
        相关资源
        最近更新 更多