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

Java 使用JPA计算延迟加载属性的最佳位置在哪里,java,hibernate,orm,jpa,Java,Hibernate,Orm,Jpa,假设我们有一个“问题”和“答案”实体 我的问题是,哪里是进行计数的最佳地点?(因为我做了很多关于问题实体的查询,按日期、按标签、按类别、按提问者等等。在每个查询中添加计数操作显然不是一个好的解决方案 我的第一次尝试是实现@PostLoad监听器,所以每次加载问题实体时,我都会计算。但是,EntityManager不能被注入监听器中。所以这种方法不起作用 任何提示?(我使用Hibernate作为提供程序)。如果不排除使用扩展,您可以使用EXTRA选项: @OneToMany(fetch = Fet

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

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

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


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

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

@OneToMany(fetch = FetchType.LAZY)
@LazyCollection(LazyCollectionOption.EXTRA)
private List<Answer> answers = new ArrayList<Answer>();
@OneToMany(fetch=FetchType.LAZY)
@LazyCollection(LazyCollectionOption.EXTRA)
私有列表答案=新的ArrayList();

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

您的持久性提供程序是什么?是否可以使用扩展?
String count = "select count(o) from Answer o WHERE o.question=:q";
@OneToMany(fetch = FetchType.LAZY)
@LazyCollection(LazyCollectionOption.EXTRA)
private List<Answer> answers = new ArrayList<Answer>();