|
|
|
Hibernate. Lazy object in JSP ... LazyInitializationException
|
|||
|---|---|---|---|
|
#18+
Давненько не приходилось останавливаться на проблемах с загрузкой ленивых объектов/коллекций, думал, что навсегда поборол для себя этот вопрос. Есть связанные лениво объекты (причем, "один-к-одному"): Код: java 1. 2. 3. 4. 5. 6. 7. 8. Ну, и, допустим, у User пара полей - field1 и field2. Есть ДАО-слой, где я получаю объект AuthUser, типа такого: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Естественно, реализовываю OpenSessionInView, правда, не через фильтр, а через интерцептор, что совершенно не меняет дела. Во вьюшке - JSP - хочу получить поле authUser.user.field1 ... Получаю ошибку LazyInitializationException: could not initialize proxy - no Session Паттерн OSIV (фильтр или интерцептор) срабатывает - это видно по стеку ошибки. Если я дебагом поставлю точку останова в методе ДАО findAuthUser, то все работает нормально - страничка отображается нормально, все "срослось". Убираю точку останова - исключение. Полночи просидел, не хотел напрямую идти с вопросом, и нашел решение полутыком-полунаитием, исследуя спринговский пакет org.springframework.orm.hibernate4. В спринге при работе с 3-им хибером удобным и популярным было работать с HibernateTemplate, что, как я понял, не очень нравилось хибернейту (людям из), и похоже, в 4-ом консенсус был достигнут, и программеров обязали все же использовать sessionFactory.getCurrentSession(). Но в указанном пакете есть класс SessionFactoryUtils, у которого всего 4 метода, среди которых есть openSession(sessionFactory). Я так понимаю, этот статический класс оставили, чтобы не сильно ломать ту гибкость (или многообразие), которая была в 3-ем, типа, "и вашим, и нашим". Решил не получать текущую сессию для получения объекта, а создать новую: Код: java 1. 2. 3. 4. Так все замечательно работает - уже проверил 100 раз, не подвело ни разу. Но терзают смутные сомнения - не насоздаю ли я слишком много сессий при относительно большой нагрузке? Насколько оправдано такое решение? Не может ли появиться ошибка на 101-ый раз? P.S. Понятно, что с EAGER я бы даже этого вопроса не коснулся, это даже не обсуждается. Но а) интерес все же на гору взойти, а не обойти; б) с терминологией туговато, но - родительский объект (authUser) по логике не подлежит изменению, или, по крайней мере, просто обновляется и клиент всегда работает с реальным объектом, а вот с зависимым (user) может быть проблема - он не библиотечный - бизнес-слой может изменить зависимый объект и появляется необходимость всегда обновлять связи, и это может стать проблемой для многопоточного приложения, слишком скурпулезно надо отслеживать все изменения, а ленивость загрузки нивелирует проблему. Хотя я не буду утверждать однозначную правильность слов, это всего лишь мое понимание и выводы из того, чего я ничитался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2012, 14:59:40 |
|
||
|
Hibernate. Lazy object in JSP ... LazyInitializationException
|
|||
|---|---|---|---|
|
#18+
У вас там случаем не редирект? И да, при one-to-one смысла делать лейзи как-бы и нет, если в зависимой сущности нету клобов и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2012, 15:34:40 |
|
||
|
Hibernate. Lazy object in JSP ... LazyInitializationException
|
|||
|---|---|---|---|
|
#18+
Да, редирект. Это сильно меняет акценты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2012, 15:42:14 |
|
||
|
Hibernate. Lazy object in JSP ... LazyInitializationException
|
|||
|---|---|---|---|
|
#18+
Ну насколько я понимаю реквест заканчивается - session закрывается, начинается редирект -и тут нужна новая session, никакой интерцептор и OSIV не помогут. Вот вы во втором случае так и делаете - поэтому и работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2012, 17:09:46 |
|
||
|
Hibernate. Lazy object in JSP ... LazyInitializationException
|
|||
|---|---|---|---|
|
#18+
Ну да ... что-то в этом есть. Тогда главный вопрос остался - запрос зазакроется, сессия хибера автоматом следом за ней закроется? (ну, если еще кем-то не используется) Если так, то вздыхаю спокойно ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2012, 18:47:21 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=286&tid=2131645]: |
0ms |
get settings: |
20ms |
get forum list: |
23ms |
check forum access: |
7ms |
check topic access: |
7ms |
track hit: |
49ms |
get topic data: |
16ms |
get forum data: |
4ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 352ms |
| total: | 543ms |

| 0 / 0 |
