gpt4 book ai didi

java - 使用 JPA 计算延迟加载属性的最佳位置在哪里

转载 作者:行者123 更新时间:2023-11-29 06:22:25 25 4
gpt4 key购买 nike

假设我们有一个“问题”和“答案”实体,

@Entity

public class Question extends IdEntity {
@Lob
private String content;
@Transient
private int answerTotal;
@OneToMany(fetch = FetchType.LAZY)
private List<Answer> answers = new ArrayList<Answer>();
......

每次查询Question时,我都需要告诉这个问题有多少答案。所以我需要数数:

String count = "select count(o) from Answer o WHERE o.question=:q";

我的问题是,最好在哪里进行计数? (因为我查询了很多Question实体,按日期,按标签,按类别,按提问者等,每次查询都加计数操作显然不是一个好的方案。

我的第一次尝试是实现一个@PostLoad 监听器,因此每次加载 Question 实体时,我都会计数。但是,EntityManager 不能注入(inject)到 listener 中。所以这种方式行不通。

有什么提示吗? (我使用 Hibernate 作为提供者)。

最佳答案

如果不排除使用扩展,您可以使用 @LazyCollection使用 EXTRA 选项:

@OneToMany(fetch = FetchType.LAZY)
@LazyCollection(LazyCollectionOption.EXTRA)
private List<Answer> answers = new ArrayList<Answer>();

这将允许在不加载集合的情况下调用 answers.size()

关于java - 使用 JPA 计算延迟加载属性的最佳位置在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2529414/

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