我有一个关于在我的实体中处理计算字段(即计数)的最佳方法的问题。我有一个包含评论的建立实体,我不想加载评论,直到我必须加载,但我确实想在加载实体对象时获取评论的数量(计数)。处理这个问题的最佳方法是什么?我已经尝试创建一个 numReviews 字段并对其进行注释@Transient,但是当我调用 getReviews().size() 时会话被关闭时遇到了一些问题。我想知道这是否是正确的方法,或者是否有更好的模式可以遵循?
@Entity
@Table(name="ESTABLISHMENT")
public class Establishment {
...
private Set<Review> reviews = new HashSet<Review>();
...
//Make this extra lazy so we can do a count without loading all the things
@OneToMany(fetch = FetchType.LAZY, mappedBy = "establishment")
@LazyCollection(LazyCollectionOption.EXTRA)
public Set<Review> getReviews() {
return reviews;
}
public void setReviews(Set<Review> reviews) {
this.reviews = reviews;
}
@Transient
public int getNumReviews(){
if(this.numReviews == null){
numReviews = this.getReviews().size();
}
return numReviews;
}