gpt4 book ai didi

java - JPA 获取子类的集合

转载 作者:行者123 更新时间:2023-12-04 18:05:38 25 4
gpt4 key购买 nike

我有一个案例,我们有这样的继承策略(这是 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 惰性 加载。 hibernate 不会执行 N + 1 SELECT,而是从缓存中获取它们。

关于java - JPA 获取子类的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27387307/

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