сбой загрузки объекта гибернации - PullRequest
3 голосов
/ 18 сентября 2011

Я использую Java и Hibernate в своем проекте. Я сталкиваюсь с очень специфической проблемой. Всякий раз, когда я загружаю сущность, выбираю в базе данных не запущенную, вместо этого всякий раз, когда я выполняю какую-либо операцию над объектом, например, получаю какое-то значение, в это время запускается выборка, которая называется отложенной загрузкой. Но проблема в том, что я не указал lazy="true" в моем файле HBM. Также иногда загрузка успешна, и затем, когда я пытаюсь сделать некоторые манипуляции с объектом, он выдает ошибку, ProxyInitializationError Session is Closed.

Можно проверить ссылку ниже для базы кода: - http://pastebin.com/yD9ZM3yH

Но если в фактическом методе я поставил System.out.println(information.getStudentName());, то код работает правильно, так как выборка запускается до закрытия сеанса.

Привет

Ответы [ 2 ]

3 голосов
/ 18 сентября 2011

Это нормальный бехавиор.

при использовании session.load(Object.class, id) возвращаемый объект является прокси-классом.Просто посмотрите на мой ответ здесь:

Что делает метод load () Hibernate для несуществующих идентификаторов?

2) вы получаете эту ошибку, потому что, как толькопо получении прокси-сервера сеанс Hibernate закрывается, и инициация прокси выдает это исключение.

Подробнее об этом и возможных решениях можно прочитать в этой технической статье.

http://community.jboss.org/wiki/OpenSessionInView

Надеюсь, это поможет.

1 голос
/ 18 сентября 2011

Существует разница между session.load и session.get

Подробнее см. https://forum.hibernate.org/viewtopic.php?p=2387456.

Другая вещь, о которой следует помнить, это границы транзакций,Вот почему добавление

System.out.println(information.getStudentName());

сработало.Это произошло до закрытия сеанса, поэтому прокси смог инициализировать поле.

Эффект загрузки LAZY и EAGER, когда и как загружаются связанные объекты (Collections или OneToOne), а не как простые свойства объекта.загружен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...