Java 强制Hibernate返回正确的子类代理
我有以下Hibernate类:Java 强制Hibernate返回正确的子类代理,java,hibernate,subclass,Java,Hibernate,Subclass,我有以下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 { /*
@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仔细查看用户类型并返回正确的代理,可能不执行另一个查询?我认为如果该用户尚未作为用户加载(例如,由于以前加载的关联),它应该返回正确的子类实例 如果没有,那么您就无法让它返回实际的医生实例。因此,您应该调用User的多态方法,或者使用专有的Hibernate代码检查它是否是代理,初始化它并获取包装的对象
如果您事先知道它是医生,那么请使用“来自医生”而不是“来自用户”。请注意,因为为了获得特定实例,Hibernate将与所有子类表执行联合。可能对性能非常不利。