Ke.*_*Ke. 2 java orm hibernate 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>();
......
Run Code Online (Sandbox Code Playgroud)
每次查询问题时,我都需要告诉该问题有多少个答案。所以我需要计算:
String count = "select count(o) from Answer o WHERE o.question=:q";
Run Code Online (Sandbox Code Playgroud)
我的问题是,哪里是进行计数的最佳位置?(因为我对Question实体做了很多查询,按日期、按标签、按类别、按询问者等。在每个查询中添加计数操作显然不是一个好的解决方案。
我的第一次尝试是实现一个 @PostLoad 侦听器,因此每次加载 Question 实体时,我都会进行计数。但是,EntityManager 无法注入侦听器中。所以这个方法行不通。
有什么提示吗?(我使用 Hibernate 作为提供程序)。
如果不排除使用扩展,您可以使用@LazyCollection
以下EXTRA
选项:
@OneToMany(fetch = FetchType.LAZY)
@LazyCollection(LazyCollectionOption.EXTRA)
private List<Answer> answers = new ArrayList<Answer>();
Run Code Online (Sandbox Code Playgroud)
这将允许answers.size()
在不加载集合的情况下进行调用。
归档时间: |
|
查看次数: |
874 次 |
最近记录: |