Hibernate Open Session in View: транзакция на запрос?

Я использую Hibernate с Spring на Tomcat. Я читал и перечитывал часто упоминаемую вики-страницу JBossпо этой теме, и это было полезно. Но это оставляет меня с некоторыми вопросами.

  1. Идея начинать транзакцию для каждого запроса меня беспокоит. Я думаю, я мог бы ограничить фильтр определенными контроллерами - может быть, поместить все мои контроллеры, которым нужна транзакция, по псевдо-пути «tx» или что-то в этом роде. Но не является ли плохой идеей использование транзакций, если вы не знаете, понадобится ли она вам? И если я просто выполняю чтение в каком-то запросе — чтение, которое, скорее всего, может исходить из кеша — не лучше ли мне обойтись без транзакции?

  2. Я читал сообщения о том, как они обрабатывают транзакции на сервисном уровне, и я хотел бы сделать это с помощью Spring. Но тогда как выглядит код фильтра? Я все еще хочу, чтобы сеанс был доступен в моем представлении для некоторой ленивой загрузки.

  3. Если все, что мне нужно сделать, это вызвать sessionFactory.getCurrentSession()в моем фильтре, как его «освободить» обратно в фабрику сеансов для повторного использования? (Я ожидал увидеть session.close()или что-то в этом роде, даже при использовании транзакций.) Кто сообщает фабрике сеансов, что этот сеанс можно использовать повторно?

  4. Возможно, это вызов beginTransaction(), который связывает данное соединение с базой данных с данным сеансом на время запроса? В противном случае сеанс извлекает соединения БД из пула по мере необходимости, верно?

Спасибо за ваше терпение ко всем моим вопросам.

(И если ваш ответ будет ссылкой на документацию Spring, вы просто заставите меня плакать. Вы ведь этого не хотите, не так ли? Я заплачу реальные деньги, если люди перестанут отвечать на Spring- связанные вопросы таким образом.)

11
задан Marvo 19 May 2012 в 04:09
поделиться