|
|
|
Hibernate: как избежать LazyInitializationException при использовании кеша объектов?
|
|||
|---|---|---|---|
|
#18+
Разрабатываем веб-портал с большой моделью данных с использованием 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 сессии при последующих реквестах уже не будет. Подскажите, пожалуйста, как все же разработать нужное нам решение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2012, 12:24:29 |
|
||
|
Hibernate: как избежать LazyInitializationException при использовании кеша объектов?
|
|||
|---|---|---|---|
|
#18+
Зачем вам какой-то свой кэш, если проблема решается с помощью кэша второго уровня в Hibernate? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2012, 12:32:52 |
|
||
|
Hibernate: как избежать LazyInitializationException при использовании кеша объектов?
|
|||
|---|---|---|---|
|
#18+
Zealander, не понял, в чём проблема. Сессии короткие - одна за реквест-запрос. Всё равно кто там её запрашивает. Запрос первой коллекции загрузит её в кеш. Запрос второй аналогично. Хибер обеспечивает изоляцию об-тов между N реквестами. Т.е. считай что они выстроились в очередь. авторлибо с коллекцией B либо с коллекцией C запрос на view делай либо В либо С ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2012, 12:34:18 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=296&tid=2132047]: |
0ms |
get settings: |
16ms |
get forum list: |
23ms |
check forum access: |
7ms |
check topic access: |
7ms |
track hit: |
64ms |
get topic data: |
19ms |
get forum data: |
5ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
| others: | 332ms |
| total: | 537ms |

| 0 / 0 |
