gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:14:53 27 4
gpt4 key购买 nike

我有以下 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 仔细查看用户类型并返回正确的代理,可能不执行另一个查询吗?

最佳答案

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

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

如果您事先知道它是 Doctor,则使用“from Doctor”而不是“from User”。

关于java - 强制 Hibernate 返回正确的子类代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8544068/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com