|
|
|
Hibernate: LazyInitializationException: failed to lazily initialize a collection of role
|
|||
|---|---|---|---|
|
#18+
Приветствую! Например, в слое DAO у меня есть метод, возвращающий список потомков некоторой сущности - Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. В бизнес- слое я хочу обратиться к нему некоторым образом- Код: java 1. 2. 3. 4. Однако на l.size() выбрасывается исключение такого характера - Caused by: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: ....., no session or session was closed С чем это может быть связано? Был бы весьма признателен за информацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2012, 15:27:29 |
|
||
|
Hibernate: LazyInitializationException: failed to lazily initialize a collection of role
|
|||
|---|---|---|---|
|
#18+
Ленивые зависимости вытаскиваются из текущей сессии. У вас сессия закрыта. Вы вообще про ленивую загрузку не читали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2012, 15:29:14 |
|
||
|
Hibernate: LazyInitializationException: failed to lazily initialize a collection of role
|
|||
|---|---|---|---|
|
#18+
Приветствую, Blazkowicz! Ясно, благодарю. К сожалению, иногда приходится learning by doing. Согласен, вопрос нужно проработать тщательным образом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2012, 15:36:41 |
|
||
|
Hibernate: LazyInitializationException: failed to lazily initialize a collection of role
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2012, 15:39:43 |
|
||
|
Hibernate: LazyInitializationException: failed to lazily initialize a collection of role
|
|||
|---|---|---|---|
|
#18+
Petro123, спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2012, 15:41:56 |
|
||
|
Hibernate: LazyInitializationException: failed to lazily initialize a collection of role
|
|||
|---|---|---|---|
|
#18+
Собственно, депроксирование посредством initializeAndUnproxy эффекта не возымело, возможно, в силу не верного применения - я передал в описанный метод экземпляр класса Parent, полученный из текущей сессии и далее попытался из него вернуть список, однако исключение осталось тем же. Возможно, этот фильтр, насколько я понимаю, должен решить проблему - Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. ++ маппинг в web.xml Т.е. в DAO- слое будет вызов .....getCurrentSession(); без последующего закрытия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2012, 21:37:25 |
|
||
|
Hibernate: LazyInitializationException: failed to lazily initialize a collection of role
|
|||
|---|---|---|---|
|
#18+
Open Session In View это тоже антипаттерн от безысходности. Его можно использовать для тестовых целей, но по-хорошему данные уже должны быть сформированы в контролере, когда он их получает от сервиса. А так у вас View слой ходит в базу когда ему вздумается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2012, 21:48:54 |
|
||
|
Hibernate: LazyInitializationException: failed to lazily initialize a collection of role
|
|||
|---|---|---|---|
|
#18+
BlazkowiczOpen Session In View это тоже антипаттерн от безысходности. Его можно использовать для тестовых целей, но по-хорошему данные уже должны быть сформированы в контролере, когда он их получает от сервиса. А так у вас View слой ходит в базу когда ему вздумается. дело же не в контроллёре. Всё бОльше ГУИ хотят ходить в БД когда им вздумается (ZK на каждый MoiseEvent - лезет на сервер). Из-за этого у них проблемы с хибером (ZK). Т.е. MVC не работает при AJAX. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2012, 21:56:47 |
|
||
|
Hibernate: LazyInitializationException: failed to lazily initialize a collection of role
|
|||
|---|---|---|---|
|
#18+
ivanov-voidбез последующего закрытия отпишись о рез-те. Мне интересны длинные транзакции по 8 часов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2012, 21:58:24 |
|
||
|
Hibernate: LazyInitializationException: failed to lazily initialize a collection of role
|
|||
|---|---|---|---|
|
#18+
Petro123Т.е. MVC не работает при AJAX. У меня работает. Что я делаю не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2012, 21:59:34 |
|
||
|
Hibernate: LazyInitializationException: failed to lazily initialize a collection of role
|
|||
|---|---|---|---|
|
#18+
BlazkowiczPetro123Т.е. MVC не работает при AJAX. У меня работает. Что я делаю не так? я вашего ГУИ не видел. Работа-работе рознь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2012, 22:00:41 |
|
||
|
Hibernate: LazyInitializationException: failed to lazily initialize a collection of role
|
|||
|---|---|---|---|
|
#18+
BlazkowiczА так у вас View слой ходит в базу когда ему вздумается. Согласен. Petro123, хорошо, мне самому интересно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2012, 22:02:07 |
|
||
|
Hibernate: LazyInitializationException: failed to lazily initialize a collection of role
|
|||
|---|---|---|---|
|
#18+
Petro123Сессию хибера лучше открывать в начале реквеста и закрывать в конце. А не дробить транзакции так мелко. ivanov-voidТ.е. в DAO- слое будет вызов .....getCurrentSession(); без последующего закрытия. Однако в Open Session in View ничего об этом не говорится, по- крайней мере, фильтр не содержит релевантного кода закрытия/ открытия сессии. Код: java 1. 2. 3. 4. 5. 6. Но понятно, что если не закрывать, то транзакции будут именно такими, как вы указали. Однако если закрывать, то проблема, описанная в начале поста остается. Могу- ли я добавить в фильтр код, открывающий сессию перед передачей по цепочке фильтров и затем закрывающий после коммита? Соответственно, убрать его из DAO- слоя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 09:23:09 |
|
||
|
Hibernate: LazyInitializationException: failed to lazily initialize a collection of role
|
|||
|---|---|---|---|
|
#18+
ivanov-voidOpen Session in View у меня всё нет времени проверить, вот код на который весь инет ведёт. Посмотри его, только отпишись потом http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=916663&msg=12063401 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 09:40:24 |
|
||
|
Hibernate: LazyInitializationException: failed to lazily initialize a collection of role
|
|||
|---|---|---|---|
|
#18+
Посмотрел, внес соответствующие изменения в фильтр; проблема разрешилась, однако появилась другая - Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. , где: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ...и - Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Далее я добавляю родительскую сущность - ... // presentation layer if(dao.save(gbCapacityEntity)) .... ... // dao layer session = HibernateUtil.getCurrentSession(); session.save(gbCapacity); session.flush(); ... Все Ок. Потом привязываю к ней потомков и обновляю - ... if(gbCapacityDAO.update(gbCapacity)... ... Исключение: Cause: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.intellex.marksist.hbn.model.GbCapacity#307456] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 11:14:36 |
|
||
|
Hibernate: LazyInitializationException: failed to lazily initialize a collection of role
|
|||
|---|---|---|---|
|
#18+
Небольшая ремарка - там Код: java 1. имелся в виду. Странное исключение, если принять во- внимание тот факт, что сессия закрыта к тому моменту и открыта снова. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 11:29:05 |
|
||
|
Hibernate: LazyInitializationException: failed to lazily initialize a collection of role
|
|||
|---|---|---|---|
|
#18+
Какие-то у вас стандартные грабли. Хибер получил 2 экземпляра одного и того же класса с одним и тем же PK. Он озадачен тем какой же из двух инстансов ему использовать. Откуда у вас в системе два экземпляра - покажет дебаг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 11:34:27 |
|
||
|
Hibernate: LazyInitializationException: failed to lazily initialize a collection of role
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, ясно, благодарю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 11:38:20 |
|
||
|
Hibernate: LazyInitializationException: failed to lazily initialize a collection of role
|
|||
|---|---|---|---|
|
#18+
Код: java 1. 2. 3. 4. 5. 6. 7. Скажем, некоторый функционал предполагает сохранение определенной сущности по запросу - Код: java 1. 2. 3. Сам метод save: Код: java 1. 2. 3. 4. 5. 6. После этого сессия закрыта через фильтр. Далее на один запрос имеет место несколько последовательных обращений к слою персистенции - Код: java 1. 2. 3. 4. 5. 6. 7. Реализации методов dao похожи, т.е. закрыть сессию в них нельзя, иначе коммит из фильтра потом не пройдет. Вопрос, т.о., сводится к тому, чтобы в рамках текущей сессии проделать приведенную выше последовательность действий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 14:33:51 |
|
||
|
Hibernate: LazyInitializationException: failed to lazily initialize a collection of role
|
|||
|---|---|---|---|
|
#18+
Что вы мучаетесь. Возьмите Spring с декларативным управлением транзакциями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 14:51:10 |
|
||
|
Hibernate: LazyInitializationException: failed to lazily initialize a collection of role
|
|||
|---|---|---|---|
|
#18+
ivanov-voidРеализации методов dao похожи, т.е. закрыть сессию в них нельзя, иначе коммит из фильтра потом не пройдет. Вопрос, т.о., сводится к тому, чтобы в рамках текущей сессии проделать приведенную выше последовательность действий. я не понял твоей проблемы: 1. кто мешает сделать эту посл-ть? 2. следить за _лишним_ BeginTransaction нужно везде, не только в ОРМ, но и в БД. 3. этот код на самом деле не запрос на view, а запрос на реквест. Причём "на реквест" он становится не таким особенным, т.к. ты просто вынес строку "ВсёКоммит" из сервлета на уровень выше, в фильтр (ООП). Т.е. - делай! Кто мешает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 14:55:00 |
|
||
|
Hibernate: LazyInitializationException: failed to lazily initialize a collection of role
|
|||
|---|---|---|---|
|
#18+
BlazkowiczЧто вы мучаетесь. Возьмите Spring с декларативным управлением транзакциями. он уже сделал. У него нет в сервлете транзакций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 14:55:45 |
|
||
|
Hibernate: LazyInitializationException: failed to lazily initialize a collection of role
|
|||
|---|---|---|---|
|
#18+
Если разговор всё ещё про NonUniqueObjectException, то как-то всё равно не понятно откуда второй экземпляр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 14:59:03 |
|
||
|
Hibernate: LazyInitializationException: failed to lazily initialize a collection of role
|
|||
|---|---|---|---|
|
#18+
BlazkowiczЧто вы мучаетесь. Возьмите Spring с декларативным управлением транзакциями. Это Vaadin; есть некоторые преодолимые сложности в вопросах интеграции со Spring, пока этим не занимался, хотя как свести их, знаю. BlazkowiczЕсли разговор всё ещё про NonUniqueObjectException, то как-то всё равно не понятно откуда второй экземпляр. Мне тоже. Petro123 У него нет в сервлете транзакций. Спасибо за пример аналогии! Мешает все тот же NonUniqueObjectException. Может, hashcode() и equals() добавить в сущности? Странно, что не помогает .....flush()... Есть- ли способы разорвать эту "already associated with the session"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 15:49:09 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=37713584&tid=2131025]: |
0ms |
get settings: |
20ms |
get forum list: |
15ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
64ms |
get topic data: |
14ms |
get forum data: |
4ms |
get page messages: |
87ms |
get tp. blocked users: |
2ms |
| others: | 344ms |
| total: | 562ms |

| 0 / 0 |
