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 сессии при последующих реквестах уже не будет.

Подскажите, пожалуйста, как все же разработать нужное нам решение?
Re: Hibernate:как избежать Lazy ошибки при кеше объектов?
От: Blazkowicz Россия  
Дата: 06.04.12 08:34
Оценка:
Здравствуйте, Zealander, Вы писали:

Z>Подскажите, пожалуйста, как все же разработать нужное нам решение?

Зачем вы пишете своё кеширование, если Hibernate Second Level кэш успешно справляется с вашей проблемой без побочных эффектов.
Re[2]: Hibernate:как избежать Lazy ошибки при кеше объектов?
От: Zealander  
Дата: 13.04.12 20:48
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Зачем вы пишете своё кеширование, если Hibernate Second Level кэш успешно справляется с вашей проблемой без побочных эффектов.


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