2010-03-27 16 views
1

比方說,我們有一個「問題」和「答案」實體延遲加載性能最好。安迪,這裏是統計使用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"; 

我的問題是,哪裏是最好的地方做計數? (因爲我對問題實體,按日期,按標籤,按類別,按提問者等做了很多查詢。在每個查詢中添加計數操作顯然不是一個好的解決方案。實現一個@PostLoad監聽器,所以每次加載Question實體時,我都會計數,但是EntityManager不能注入監聽器,所以這種方式不起作用。

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

+0

什麼是您的持久性提供程序?是否使用擴展選項? – 2010-03-27 15:03:13

回答

3

如果不使用擴展名,則可以使用@LazyCollectionEXTRA選項:

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

這將允許在不加載集合的情況下致電answers.size()