【发布时间】:2014-12-09 19:34:02
【问题描述】:
我有一个案例,我们有这样的继承策略(这是 jpa wiki 的一个例子,我们的真实例子是另一个商业案例:))
@Entity
@Inheritance
@DiscriminatorColumn(name="PROJ_TYPE")
@Table(name="PROJECT")
public abstract class Project {
@Id
private long id;
...
}
@Entity
@DiscriminatorValue("L")
public class LargeProject extends Project {
@OneToMany
private Set<Member> members;
}
@Entity
@DiscriminatorValue("S")
public class SmallProject extends Project {
}
我的数据库中有一堆项目,想一次获取所有项目,但这样做,我也想一次获取我的成员列表。 有没有办法用 jpql 做到这一点?我知道 TYPE 注释允许我查看类型,但我可以将它与 JOIN FETCH 结合使用吗?
我正在使用hibernate,但如果不需要,我不想降级回hibernate api
【问题讨论】:
-
执行 entityManager.createQuery("from " + Project .class.getName()); 时会发生什么?它不获取成员列表吗?
-
是的,但它不能让我决定是否要急切地获取它
-
@jelle 你想让他们急切地想,它让他们急切地想。问题是您希望它们通过单个执行的 SQL 查询立即被感染。不依赖 Hibernate API 是不可能的,因为 JPA 规范不强制实现 SQL 查询的执行方式。
-
好的,谢谢你的遮阳篷。我已经怀疑只有 JPA 是不够的。什么是休眠解决方案?
标签: java hibernate jpa inheritance jpql