エンティティで計算フィールド、つまりカウントを処理するための最良の方法について質問があります。レビューを含むEstablishmentエンティティがあり、必要になるまでレビューをロードしたくありませんが、エンティティオブジェクトをロードするときにレビューの数(カウント)を取得したいと思います。これを処理するための最良の方法は何ですか?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;
}