Приветсвую, $USER. Начал тут знакомство с Hibernate, не могу никак разобраться, как правильно работать с сессиями.
Есть некоторое кол-во DAO классов, для управления сущностями ДБ, реализующие один интерфейс. Пример(source). Instance такого DAO создается один раз (при первом обращении), и живет при всем жизненном цикле приложения (на сервлетах). И все бы было бы хорошо, если бы это работало корректно, во всех случаях.
В ситуации, как в исходнике, когда на каждый DAO выделяется своя ссессия, возникает исключительная ситуация при update нескольких связанных объектов:
Illegal attempt to associate a collection with two open sessions
Если же для каждого обращения открывать свою сессию, тогда возникают проблемы с LAZY, коих у меня на самом деле больше, чем EAGER, т.к. в структуре много связей.
Если же создать общую сессию для всех DAO, и обращаться к ней через getCurrentSession(), но тогда каждый commit() закрывает сессию.
Еще пробовал ( чисто just for funs, дабы точно исключить эту глупую возможность) еще и общую транзакцию, с вызовом flush() после каждого обращения к бд, но тут проблема со вложенными транзакциями случается. Почему, не очень понятно.
nested transactions not supported
Больше идей нет. Что же я делаю не так? Где компромиссный вариант?