/ / Питання про дизайн класу POJO Hibernate - java, hibernate, orm

Питання про дизайн класу Hibernate POJO - java, hibernate, orm

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

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

оскільки вони є рефренією до деякої іншої сутностікласів, моє питання, коли я буду витягувати мій клас призначення я не хочу, щоб ці refrence, щоб завантажитися в пам'яті, так що можна отримати їх пізніше, коли користувач натискає на будь-який з посилань, як (airtransport) .як це може досягти найкращим чином. Я не в Hibernate тому, будь ласка, виправте мене, де я помиляюся.

Thnaks заздалегідь

Відповіді:

2 для відповіді № 1

Це називається "ледачим завантаженням". За замовчуванням всі колекції в hibernate (і JPA) завантажуються ліниво - тобто вони не завантажуються, поки вони не будуть доступні. Так за замовчуванням ваш об'єкт не отримає всіх даних.

Але ліниве навантаження має свої ускладнення. Якщо ви спробуєте отримати доступ до колекції, коли сеанс глибокого сну закрито, викидається виняток. І, як здається, вам знадобляться колекції після того, як користувач зробить певну дію (натискає кнопку).

У цьому випадку у вас є два варіанти:

  • коли користувач натискає кнопку, ви знову завантажуєте об'єкт і ініціалізуєте потрібну колекцію. Або через Hibernate.initialize(..) або шляхом перебору в перегляді. Зауважте, що сеанси, як правило, закриті перед тим, як переглядати зображення, так що вам може знадобитися OpenSessionInViewFilter

  • Не використовуйте колекції взагалі. Вони все одно мають обмежену поведінку HQL або API критеріїв для отримання результатів. Це дозволяє мати пейджинг, і ви не думаєте про ледачі проблеми


0 для відповіді № 2

Це називається Lazy Fetch у світі ORM. Прочитайте посібник тут. Ви також можете прочитати про відповідний зразок: Відкрити сеанс перегляду