Разрабатываем веб-портал с большой моделью данных с использованием Hibernate.
Столкнулись со следующим вопросом:
Есть некий класс:
public class ClassA{
private Collection collectionB;
private Collection collectionC;
public Collection getCollectionB();
public Collection getCollectionC();
}
Используем кеш объектов, где объекты хранятся длительное время, на протяжении большого количества запросов.
Так вот, на одной странице портала вызывается ClassA.getCollectionB(), на другой — ClassA.getCollectionC().
Как реализовать следующую функциональность: при первом обращении к объекту класса ClassA доставать его из базы вместе либо с коллекцией B либо с коллекцией C (в зависимости от страницы портала) и складывать в кеш объектов. Затем, если в будущем будет обращение к странице, которая потребует вторую, незагруженную ранее коллекцию, загружать вторую коллекцию, и использовать объект из кеша с загруженной коллекцией.
Мысли по этому поводу:
Первое, что приходит в голову, использовать в обеих случаях связи lazy=true. И здесь думаем использовать паттерн Open Session In View, чтобы правильно прогрузились все lazy связи в рамках реквеста. Но как быть в случае дальнейших реквестов к другим страницам портала? Ведь при использовании Open Session In View сессии при последующих реквестах уже не будет.
Подскажите, пожалуйста, как все же разработать нужное нам решение?
Re: Hibernate:как избежать Lazy ошибки при кеше объектов?
Здравствуйте, Zealander, Вы писали:
Z>Подскажите, пожалуйста, как все же разработать нужное нам решение?
Зачем вы пишете своё кеширование, если Hibernate Second Level кэш успешно справляется с вашей проблемой без побочных эффектов.
Re[2]: Hibernate:как избежать Lazy ошибки при кеше объектов?
Здравствуйте, Blazkowicz, Вы писали:
B>Зачем вы пишете своё кеширование, если Hibernate Second Level кэш успешно справляется с вашей проблемой без побочных эффектов.