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

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

// @ PersistenceContext (тип = PersistenceContextType.EXTENDED)
@PersistenceContext частный EntityManager entityManager;

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

спасибо

1 Ответ

1 голос
/ 27 октября 2010

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

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

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

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