繁体   English   中英

JPA 获取子类的集合

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM