【问题标题】: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
现在在数据库中我有三个表
user table with id,password
teacher with FK and other stuff
parent with FK and other stuff
现在我正在使用 User 类检查登录。
我的问题是,如果员工登录,那么内存中的对象将是用户类型。那么我怎样才能得到 Employee 对象
我的模型错了,我需要采取不同的方式吗?
【问题讨论】:
标签:
java
hibernate
class
jakarta-ee
inheritance
【解决方案1】:
假设 Employee 是 User 的第三个子类,那么如果一个用户登录,并且你使用 Hibernate 从数据库中获取了这个用户,而这个用户实际上是一个员工,那么 Hibernate 将返回一个 Employee 实例。它可以按您的预期工作。
如果没有,那么你做错了什么,但不看代码就无法判断。
【解决方案2】:
如果你向 hibernate 请求 User 类型的对象,你总是会得到一个 UserEnhancedByCGLib(或类似的东西)。您不能(原则上)将其转换为Teacher 或Parent。
你有两个选择来解决这个问题。
1) 您在登录时知道用户实际上是教师/家长,而不是您最初向 hibernate 询问教师/家长对象而不是用户对象。
2) 您在登录时并不知道,当您真正需要教师/家长专业化时,您必须使用 User 对象并对数据库进行第二次查询。
第二个方法是:
public Object refresh(Object object) {
if (object != null) {
if (object instanceof HibernateProxy) {
return ((HibernateProxy) object).getHibernateLazyInitializer().getImplementation();
}
}
return object;
}
哪个(如果没记错的话)会给你一个具体的类,但一个分离的对象。