2010-12-04 4 views
2

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

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

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

Thnaks заранее

+0

не добавляйте [закрытые] на свои вопросы. Это означает другое: когда вопрос закрывается, потому что он не имеет отношения к stackoverflow (или для спама), `[closed]` добавляется автоматически. Тот факт, что вопрос отвечает успешно, указывается принятым ответом. – Bozho 2010-12-04 07:10:29

+0

+1 Thnaks для указателя .. :) – 2010-12-04 07:53:23

ответ

2

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

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

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

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

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

0

Это называется Ленивый Fetch в ОРМ мире. Прочтите учебник here. Вы также можете прочитать о связанной схеме: Open Session in View

+0

Спасибо за ссылки – 2010-12-04 06:30:46