2013-09-06 2 views
1

Я пытаюсь получить кеширование, работающее с запросом, у которого осталось объединение fetch (на ленивых ассоциациях), но я получаю LazyInitianlizationException, когда я включаю кеширование по запросу.HQL, Collections & Query Cache - LazyInitializationException

Я попытался использовать Hibernate.initialize() в коллекциях в DAO без каких-либо успехов.

Оба объекта и коллекции имеют аннотации кэш-памяти.

Нельзя спящий режим использовать кеш второго уровня для загрузки объектов для идентификаторов коллекции в кеше запросов?

Я не хочу использовать OpenSessionInView фильтр.

Редактировать: Hibernate.initialize() в методе dao решила проблему. по какой-то причине первый раз это не сработало. При использовании запросов или критериев профили объединения/выборки не выполняются. необходимо выполнить вручную. (немного неутешительно)

ответ

0

Вы все еще находитесь в транзакции при выполнении инициализации?

+0

Сервисный слой аннотируется с помощью @transaction. Я получаю исключение за пределами транзакции. Я попытался инициализировать коллекцию методом DAO, но без каких-либо результатов. (оба путем простого вызова геттеров и использования hibernate.initialize) – miklesw

0

Когда я проверял код Hibernate, было похоже, что Hibernate не может повторно использовать кеш при использовании запросов HQL (у него не было компилятора из HQL к механизму кэширования).

Прочитайте интернет об LazyIntializationException, вы найдете возможные причины проблемы.

Но, честно говоря, я могу порекомендовать вам использовать fjorm. Отказ от ответственности: Я основатель fjorm.

+0

Фактические объекты загружались из кеша. Проблема заключалась в «соединенных» сущностях. Hibernate.initialize решил проблему (коллекции были загружены из кеша) – miklesw