Hibernate:как избежать Lazy ошибки при кеше объектов?
От: Zealander  
Дата: 06.04.12 08:28
Оценка:
Разрабатываем веб-портал с большой моделью данных с использованием 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 сессии при последующих реквестах уже не будет.

Подскажите, пожалуйста, как все же разработать нужное нам решение?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.