Только для чтения данных через Spring + Hibernate
заметил, что если я хочу прочитать некоторые данные, и если у меня нет контекста транзакции, я не смогу этого сделать, потому что
org.зимовать.HibernateException: сеанс не найден для текущего потока
для чтения данных , не требуется, как правило, сделки.
поэтому для того, чтобы Spring управлял сеансом, ему нужно иметь транзакцию даже для операций только для чтения, таких как selects... ?
Это не накладные ?
PS.Я не хочу открывать и закрывать сеанс вручную...
Спасибо большое.
1 ответов
@Transactional
сообщает spring, чтобы открыть и закрыть сеанс, в дополнение к инструктированию его для запуска и фиксации транзакции. Это не очень просто, но так это работает. Так что если у вас нет , нет сессии получает. Вот ваши варианты:
- использовать
@Transactional(readOnly=true)
- цель состоит в том, чтобы иметь транзакцию только для чтения. Я рекомендую это - использовать JPA
EntityManager
ввели@PersistenceContext
. Он откроет новый базовый сеанс для каждого вызова. Не то удачный вариант. Но вы должны рассмотреть возможность использованияEntityManager
С помощью readonly=true transaction - используйте дополнительный аспект / перехватчик / фильтр для открытия и закрытия сеанса. Это было бы трудно, и вы можете в конечном итоге запутаться в весенней реализации концепции текущей сессии hibernate.