2010-02-12 5 views
2

Я разрабатываю клиент-сервер-приложение с Hibernate как слой persistence и Jersey REST для сетевого общения.Hibernate ленивая загрузка + Джерси REST = нетерпеливая загрузка?

Учитывая пользователя с ролями:

  1. , когда я хочу, чтобы отобразить все пользователи в клиенте, я не хочу, роли, которые будут загружены Hibernate, и я не хочу, чтобы они были отправлены в течение сеть
  2. , когда я хочу, чтобы изменить роли пользователя, я хочу, чтобы они были загружены и должны быть переданы

Я использую шаблон предварительной загрузки (http://bwinterberg.blogspot.com/2009/09/hibernate-preload-pattern.html), чтобы определить, какие свойства должны быть загружены Hibernate , Это прекрасно работает.

В случае 1, Hibernate не загружает роли, как и предполагалось. Но как только Джерси создает XML для отправки клиенту, он читает роли пользователя, что, в свою очередь, позволяет Hibernate загружать роли (и все остальные свойства). В конце, Hibernate всегда загружает полное дерево наборов данных, принадлежащих пользователю.

Я думал об отсоединении пользователя, закрыв сеанс, прежде чем передать пользователя на Джерси, поэтому Hibernate не может загрузить роли, но это, похоже, не имеет никакого эффекта.

Любые идеи?

ответ

3
  • сделать неглубокий клон вашего объекта и установить пустую коллекцию к нему, прежде чем дать его для сериализации

  • сделать собственный прокси-сервер проксируемой коллекции, и передать нагрузку только в некоторых случаях (первая утилита) и вернуть пустую коллекцию в другую

+0

Спасибо! Собираюсь попробовать это в понедельник. – Olvagor

+0

Хорошо, я попытался сделать мелкую копию и установить пустую коллекцию. Это сработало хорошо. Но он также работал без копии, потому что, к счастью, изменение не привязано к базе данных. Теперь я установил свою пустую коллекцию непосредственно сущности из базы данных. Спасибо за ваш намек! – Olvagor

Смежные вопросы