Только для чтения данных через Spring + Hibernate

заметил, что если я хочу прочитать некоторые данные, и если у меня нет контекста транзакции, я не смогу этого сделать, потому что

org.зимовать.HibernateException: сеанс не найден для текущего потока

для чтения данных , не требуется, как правило, сделки.

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

Это не накладные ?

PS.Я не хочу открывать и закрывать сеанс вручную...

Спасибо большое.

1 ответов


@Transactional сообщает spring, чтобы открыть и закрыть сеанс, в дополнение к инструктированию его для запуска и фиксации транзакции. Это не очень просто, но так это работает. Так что если у вас нет , нет сессии получает. Вот ваши варианты:

  • использовать @Transactional(readOnly=true) - цель состоит в том, чтобы иметь транзакцию только для чтения. Я рекомендую это
  • использовать JPA EntityManager ввели @PersistenceContext. Он откроет новый базовый сеанс для каждого вызова. Не то удачный вариант. Но вы должны рассмотреть возможность использования EntityManager С помощью readonly=true transaction
  • используйте дополнительный аспект / перехватчик / фильтр для открытия и закрытия сеанса. Это было бы трудно, и вы можете в конечном итоге запутаться в весенней реализации концепции текущей сессии hibernate.