Эквивалент OpenEntityManagerInView для рабочих мест Junit и Quartz - PullRequest
0 голосов
/ 11 августа 2011

Существует ли какой-либо стандартный способ (или замена Open Session [EntityManager] in View) для использования классов, которые зависят от отложенной инициализации (fetch = FetchType.LAZY) сущностей в следующих двух случаях использования:

  1. Вконтрольные примеры JUnit

  2. В кварцевых заданиях

Для обоих приведенных выше сценариев шаблон OSIV не будет работать, поскольку в систему не поступает ни один веб-запрос.Как заставить работать Lazy Loading в таких ситуациях?

PS: Spring * OpenEntityManagerInViewFilter и OpenEntityManagerInViewInterceptor оба ориентированы на веб-запросы.

  1. Я не могу предварительно выбрать все такие отношения / объекты, создав фиктивную get, просто чтобы загрузить ее перед закрытием сессии в хранилище (DAO).
  2. Я знаю, дляJUnit Я могу вручную открыть / закрыть EM в @Before / @after.Но я ищу что-то более элегантное и стандартное.

Ссылка: LazyInitializationException из-за отсутствия сеанса, определенного в «родительском» контексте приложения в Hibernate 3 в запланированном приложении Spring с использованием аннотаций

1 Ответ

0 голосов
/ 11 августа 2011

Транзакции - это то, что вам нужно. Откройте транзакцию, получите данные, манипулируйте ими, затем закройте транзакцию, когда вы закончите. Spring связывает жизненный цикл EntityManager с жизненным циклом транзакции и сохраняет его открытым столько, сколько вам нужно.

Spring Transaction Management - важный предмет сам по себе, но использовать его действительно довольно просто. См. документы .

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