Кажется, только ваш DAO использует сессию. Таким образом, новый сеанс открывается, а затем закрывается для каждого вызова метода DAO. Таким образом, выполнение программы может быть возобновлено как:
// open a session, get the number of entity and close the session
int startingCount = sfdao.count();
// open a session, create a new entity and close the session
sfdao.create( sf );
// open a session, read an entity and close the session
SecurityFiling sf2 = sfdao.read( sf.getId() );
// open a session, delete an entity and close the session
sfdao.delete( sf );
etc...
По умолчанию сбор и сопоставление в объекте ленивы: они загружаются из базы данных по требованию. Таким образом:
sf.getSfSubmissionType().equals( sf2.getSfSubmissionType() )
выдает исключение, потому что запрашивает новую загрузку из базы данных, а сеанс, связанный с загрузкой объекта, уже закрыт.
Существует два подхода к решению этой проблемы:
создать сессию, чтобы заключить весь наш код. Таким образом, это будет означать изменение вашего контента DAO, чтобы избежать открытия второго сеанса
создайте сеанс, а затем обновите (то есть повторно подключите) вашу сущность к этому сеансу перед утверждениями.
Session.update (объект);