2011-02-09 3 views

ответ

0

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

У меня есть пружинный службы, как это:

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 

Этот запрос гибернации загрузить свойства, определенные ленивым.

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

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

2

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

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

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