ленивая загрузка в граните ds - PullRequest
2 голосов
/ 09 февраля 2011

как я буду загружать свои сущности в гибкое приложение, используя ленивую загрузку. У меня есть глубокий граф объектов

Ответы [ 2 ]

2 голосов
/ 23 апреля 2012

GraniteDS вместе с инфраструктурой управления данными позволяет прозрачно загружать непосвященные ассоциации: см. Документацию здесь . Таким образом, по сути, вам не нужно делать ничего особенного для инициализации ваших ленивых коллекций / прокси, вам нужно только получить доступ к одному из них на стороне клиента (например, запрашивая размер коллекции), и это вызовет вызов сервера и получение неинициализированных данных.

Если вы не хотите или не можете использовать прозрачную ленивую загрузку, вам нужно написать специальный метод инициализации, который должен иметь доступ к EntityManager, получить вашу сущность в качестве параметра, инициализировать требуемую связь и отправить сущность назад к клиенту.

0 голосов
/ 16 сентября 2011

AFAIK это невозможно. Вы должны были открыть сессию Hibernate, чтобы сделать это. В моем проекте я делаю то, что вам нужно, таким образом:

У меня весеннее служение вот так:

public interface SomeObjectManager {
   List<SomeObject> getObjects();     // here we have lazy loading for SomeObject's properties
   SomeObject getFullObject(long objectId); // here we're loading full object
}

Некоторые свойства SomeObject используют отложенную загрузку. Для их загрузки я использую HQL-запрос, подобный следующему:

SELECT s FROM SomeObject s
   LEFT JOIN FETCH s.child children
      LEFT JOIN FETCH children.items items
         LEFT JOIN FETCH items.property
WHERE s.id=:id

Этот запрос заставляет hibernate загружать свойства, определенные как lazy.

Поэтому, если вам не нужны полностью загруженные экземпляры SomeObject, используйте метод getObjects (). Если вам нужны подробности о конкретном экземпляре SomeObject, вы используете метод getFullObject ().

Надеюсь, это поможет.

...