Ваша сущность (com.jobs.admin.data.Company
) инициализируется лениво. Это означает, что некоторые члены на самом деле не были инициализированы, но вместо этого Hibernate установил прокси, и он будет выставлять реальные значения по запросу.
После того, как объект загружен из базы данных, вы закрываете Сессию, поэтому члены, которые были прокси-объектами, не были инициализированы! И теперь вы звоните com.jobs.admin.data.Company.toString()
, который использует членов, которые были прокси-ред. Таким образом, вы получите исключение.
Несколько предложений:
- Разделите свою логику на слои. Не открывайте свои объекты прямо на уровне пользовательского интерфейса. Когда у вас есть отдельные объекты, вам нужно скопировать их из объекта в объект пользовательского интерфейса, вы делаете это во время открытого сеанса, поэтому вы никогда не должны получать это исключение, и все становится более понятным.
- Никогда не используйте ленивые загруженные элементы в
toString()
методах. toString()
может вызываться совершенно непредсказуемо, например, во время регистрации и так далее. Вы вряд ли узнаете, будет ли у вас открытая сессия в это время или нет.