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

时间:2010-03-27 13:24:34

标签: java hibernate orm jpa

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

@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>();
......

我每次询问问题时都需要告诉问题答案的数量。所以我需要做点数:

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

我的问题是,计算的最佳位置在哪里? (因为我做了很多关于Question实体的查询,按日期,按标签,按类别,按提问者等等。在每个查询中添加计数操作显然不是一个好的解决方案。

我的第一次尝试是实现一个@PostLoad监听器,所以每次加载Question实体时,我都会计算。但是,EntityManager无法在侦听器中注入。所以这种方式不起作用。

任何提示? (我使用Hibernate作为提供者)。

1 个答案:

答案 0 :(得分:3)

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

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

这样可以在不加载集合的情况下调用answers.size()