2010-03-27 2 views
1

Допустим, у нас есть «вопрос» и «ответ» лицо,где лучше Palce рассчитывать свойство ленивых нагрузок, используя 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

Ваш провайдер постоянства? Является ли использование расширений опцией? –

ответ

3

при использовании расширений не исключено, вы могли бы, возможно, использовать @LazyCollection с EXTRA вариант:

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

Это позволит позвонить по телефону answers.size(), не загружая сборник.

Смежные вопросы