强制Hibernate返回正确的子类代理

时间:2011-12-17 10:21:17

标签: 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 {
    /* ... */
}

在登录阶段,我执行

User user = db.createQuery("from User where email = :email")
              .setParameter("email", email)
              .uniqueResult();

不幸的是,user始终是User的代理,因此我无法将其投放到Doctor。 我可以强制Hibernate仔细查看用户类型并返回正确的代理,可能不执行其他查询吗?

1 个答案:

答案 0 :(得分:1)

我认为如果此用户尚未作为用户加载(例如,由于先前加载的关联),它应该返回正确的子类实​​例。

如果没有,那么你无法让它返回一个真正的Doctor实例。因此,您应该调用User的多态方法,或者使用专有的Hibernate代码来检查它是否是代理,初始化它并获取包装对象。

如果您事先知道这是医生,那么请使用“来自医生”,而不是“来自用户”。