我有以下Hibernate类:
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public abstract class User {
@Id
private Long id;
}
@Entity
public class Patient extends User {
/* ... */
}
@Entity
public class Doctor extends User {
/* ... */
}
在登录阶段,我执行
User user = db.createQuery("from User where email = :email")
.setParameter("email", email)
.uniqueResult();
不幸的是,user
始终是User
的代理,因此我无法将其投放到Doctor
。
我可以强制Hibernate仔细查看用户类型并返回正确的代理,可能不执行其他查询吗?
答案 0 :(得分:1)
我认为如果此用户尚未作为用户加载(例如,由于先前加载的关联),它应该返回正确的子类实例。
如果没有,那么你无法让它返回一个真正的Doctor实例。因此,您应该调用User的多态方法,或者使用专有的Hibernate代码来检查它是否是代理,初始化它并获取包装对象。
如果您事先知道这是医生,那么请使用“来自医生”,而不是“来自用户”。