[英]JPA fetch collection of subclass
我有一个案例,我们有这样的继承策略(这是 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
JPA 和 Hibernate 不支持从子类获取关联,除非该属性也存在于层次结构的最顶层成员中。 但是根据这篇文章( https://thorben-janssen.com/fetch-association-of-subclass/ ),您可以通过利用 hibernate 的 1 级缓存机制来解决此限制。
在您的情况下,您将首先在单独的查询中获取Member
所有实例,然后在Project
上执行您的查询,让LargeProject.members
Lazy
加载。 Hibernate 不会执行N + 1
SELECT,而是从缓存中获取它们。
有点晚了,但我只使用 JPQL 发现了一个问题。 在你的情况下:
SELECT p FROM Project p JOIN FETCH ((TREAT(p as LargeProject)).members)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.