настройка реализации отложенной загрузки в режиме гибернации - PullRequest
0 голосов
/ 12 декабря 2011

У меня удаленный вызов API для извлечения объектов. При ленивых настройках на клиенте при доступе к дочерней коллекции с настройкой lazy=true выдается исключение "org.hibernate.LazyInitializationException". Я пытаюсь изменить поведение, чтобы исключения не выбрасывались. Я нашел LoadEventListener.INTERNAL_LOAD_LAZY в приемниках событий гибернации, но не смог получить большую часть помощи по использованию.

Я на правильном пути? Или есть какие-то другие способы решения таких ситуаций?

Ответы [ 2 ]

0 голосов
/ 13 декабря 2011

Для лениво загруженных ассоциаций Hibernate сгенерирует прокси для ленивой инициализации. Таким образом, вы можете использовать Hibenrate.isInitialize() API, чтобы определить, инициализирован ли этот прокси или нет. Таким образом, вы можете контролировать поток на основе инициализированных прокси. Если прокси-сервер не инициализирован, эти объекты еще не выбраны (имеется в виду загрузка при доступе к таким значениям свойств), поэтому вы можете контролировать поток.

0 голосов
/ 12 декабря 2011

Если вам нужна коллекция каждый раз, когда сущность используется, тогда наилучший подход - по конфигурации.По умолчанию коллекции загружаются лениво.Вы можете настроить их для быстрой загрузки (другими словами: предварительно загружены).Каждый раз, когда вы запрашиваете сущность, вы всегда получаете коллекцию.

Однако, если вам нужна коллекция только некоторое время (сценарий, который предназначен для ленивой загрузки), у вас есть парапараметры:

  • Рассмотрите возможность отделения коллекции (ей) от сущности целиком.Например, вместо того, чтобы иметь пользователя с коллекцией адресов, разделите его так, чтобы, получив своего пользователя, вы вызывали getAddressesForUser (User) отдельно.
  • Или пишите дополнительные методы на стороне сервера, которые специальновызовите коллекции для каждой сущности, чтобы они были предварительно загружены перед возвратом к клиенту.Все, что вам нужно сделать, это вызвать метод size () для коллекции.Это определенно не элегантно, но работает, если вы не можете отделить коллекции от сущности по какой-либо причине.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...