如何在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和其他东西的家长
我的模型错了吗?我需要用不同的方法吗?假设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;
}
这将(如果内存可用)给你一个具体的类,但一个分离的对象