динамически ленивая загрузка объектов не работает - PullRequest
2 голосов
/ 16 июня 2011

Я использую Spring + Hibernate в моем проекте; У меня есть два класса Reminder и Client в напоминании класса я добавил отношение многих к одному для клиента, и оно по умолчанию загружено. Мне нужен этот граф объектов для большинства сценариев в моем проекте, поэтому я установил тип выборки для клиента в классе напоминаний

Class Reminder {
    @ManyToOne
    Client client;
}

но для одного или двух сценариев я хочу сохранить инициализацию этого объекта клиентом ленивым;

поэтому я добавил метод извлечения напоминаний, как показано ниже

Criteria c = session.createCriteria();
c.setFetchMode("client", FetchMode.SELECT); 
hibernateTemplate.findByCriteria(criteria);

это не работает; он по-прежнему загружает клиентские объекты с напоминанием

в то время как обратный ход (от ленивого к нетерпеливому) работает нормально

Ответы [ 2 ]

2 голосов
/ 16 июня 2011

Из api doc:

public static final FetchMode SELECT

Fetch eagerly, using a separate select. Equivalent to fetch="select"

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

0 голосов
/ 16 июня 2011

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

Из вики JBoss:

Используйте lazy="true" on и сопоставления, чтобы включить отложенную загрузку отдельных скалярных значений, типизированных для свойств (довольно экзотический случай). Требуется инструментарий байт-кода скомпилированных постоянных классов для внедрения кода перехвата. Может быть переопределено в HQL с помощью FETCH ALL PROPERTIES.

Используйте lazy="no-proxy" для однозначных ассоциаций, чтобы включить отложенную выборку без использования прокси. Требуется инструментарий байт-кода для введения кода перехвата.

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...