Избегайте 1 уровня уровня кэша при использовании @persistenceContext (type = persistenceContexttype.extended)
Вопрос
Я только что настроил @persistenceContext (type = persistenceCtexttype.extedence) на моих классах DAO, чтобы получить ленивую загрузку, работающую на уровне просмотра (необходимо, чтобы получить не закрывать сеанс для этого), но у меня проблемы с 1 уровнем (я представляю) .. потому что объект кэшируется даже с настроек кэша второго уровня. После выключения «Type = PersiStenceCtextType.extededed» я получил систему, не кэширующую объект, но погрузился в ленивые проблемы погрузки снова.
//@PersistenceContext (type=persistenceCtexttype.exted)
@PersistenceContext Private Entitymanager Entitymanager;
Есть ли способ контролировать это? Мне действительно нужна ленивая загрузка, но не хочу, чтобы мой объект хранится на 1 кэш-памяти на 1 уровне каждый раз.
спасибо
Решение
Если вы действительно не хотите использовать расширенный контекст настойчивости и действительно понять, что значит (я не хочу быть педантичным, но это важно, так как расширенный менеджер сущности имеет разные резьбу, жизненный цикл и семантику управления памятью), мое предложение будет использовать обычный Оив (открытый Entitymanager в поле зрения) решить вашу проблему ленивого загрузки.
Весна обеспечивает две реализации этого шаблона с фильтром (OpenEntityManagerInViewFilter
) и перехватчик (OpenEntityManagerInViewInterceptor
). От Javadoc:
Предназначен для картины «Открытый Entitymanager в виду», то есть, чтобы обеспечить ленивую загрузку в веб-представлениях, несмотря на исходные транзакции, уже завершенные.