Вопрос о дизайне класса Hibernate POJO - PullRequest
2 голосов
/ 04 декабря 2010

Я изучаю hibernate и у меня есть вопрос, касающийся дизайна моего класса POJO. У меня есть место назначения класса с несколькими свойствами, такими как

private Set<AirTransport> airTransport;
private Set<RoadTransport> roadTransport;
private Set<TrainTransport> trainTransport;

, так как они являются ссылками на некоторые другие классы сущностей, мой вопрос, когдая получу свой целевой класс. Я не хочу, чтобы эти ссылки были загружены в память, чтобы они могли получить их позже, когда пользователь щелкнет по любой из ссылок, таких как (airtransport). Как это может быть достигнуто наилучшим образом.Я не в Hibernate, поэтому, пожалуйста, поправьте меня, где бы я ни был неправ.

Спасибо заранее

Ответы [ 2 ]

2 голосов
/ 04 декабря 2010

Это называется "ленивая загрузка".По умолчанию все коллекции в hibernate (и JPA) загружаются лениво, то есть они не загружаются до тех пор, пока к ним нет доступа.Поэтому по умолчанию ваш объект не будет извлекать все данные.

Но отложенная загрузка имеет свои сложности.Если вы попытаетесь получить доступ к коллекции, когда сеанс гибернации был закрыт, выдается исключение.И, как вам кажется, вам понадобятся коллекции после того, как пользователь совершит какое-либо действие (нажмет кнопку).

Для этого случая у вас есть два варианта:

  • , когдапользователь нажимает кнопку, вы снова загружаете объект и инициализируете нужную коллекцию.Либо Hibernate.initialize(..), либо повторяя его в представлении.Обратите внимание, что сессии обычно закрываются до визуализации представления, поэтому вам может понадобиться OpenSessionInViewFilter

  • вообще не использовать коллекции.В любом случае, они имеют ограниченное поведение.Используйте HQL или API критериев для получения результатов.Это позволяет вам иметь пейджинг, и вы не думаете о ленивых проблемах

0 голосов
/ 04 декабря 2010

Это называется Lazy Fetch в мире ORM. Прочитайте учебник здесь . Вы также можете прочитать о связанном шаблоне: Открыть сеанс в представлении

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