Избегайте проблем с кэшем 1 уровня при использовании @PersistenceContext(type=PersistenceContextType.EXTENDED)

Я только что настроил @PersistenceContext(type=PersistenceContextType.EXTENDED) в своих классах DAO, чтобы заставить ленивую загрузку работать на уровне представления (необходимо, чтобы он не закрывал для этого сеанс), но у меня проблемы с кешем 1 уровня (я думаю) .. Потому что объект кэшируется даже при отключенных настройках кэша второго уровня. После отключения «type = PersistenceContextType.EXTENDED» я получил, что система не кэширует объект, но снова погрузилась в проблемы с ленивой загрузкой.

//@PersistenceContext(type=PersistenceContextType.EXTENDED)
@PersistenceContext private EntityManager entityManager;

Есть ли способ контролировать это? Мне действительно нужна ленивая загрузка, но я не хочу, чтобы мой объект каждый раз сохранялся в кеше 1 уровня.

Спасибо


person Community    schedule 27.10.2010    source источник
comment
О, извините: я использую hibernate jpa impl   -  person    schedule 27.10.2010


Ответы (1)


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

Spring предоставляет две реализации этого шаблона с фильтром (OpenEntityManagerInViewFilter) и перехватчик (OpenEntityManagerInViewInterceptor). Из javadoc:

Предназначен для шаблона «Открыть EntityManager в представлении», то есть для обеспечения ленивой загрузки в веб-представлениях, несмотря на то, что исходные транзакции уже завершены.

person Pascal Thivent    schedule 27.10.2010
comment
гм, это оживит мою настойчивость с потоком, созданным запросом, не знаю, может ли это вызвать у меня проблемы, но, вероятно, лучше, чем PersistenceContextType.EXTENDED. Спасибо - person ; 27.10.2010