У меня есть метод, который потенциально может совершать много вызовов в базе данных при проверке списка объектов, использующих Hibernate по умолчанию. Если я аннотирую его @Transactional, он работает почти в четыре раза быстрее. Несколько вопросов:Зачем нужна помощь @Transactional в Spring
1) Почему это происходит быстрее?
2) Как я могу воспроизвести это увеличение скорости, не делая метод транзакционным? Мне абсолютно не нужно обертывать этот метод в транзакцию и сделать транзакцию несовместимой с реальным намерением метода.
Возможно, транзакционное изменение количества записей db (уменьшает его)? Вы можете включить ведение журнала отладки для базовых команд sql, чтобы узнать. – Kevin
Это ситуация, доступная только для чтения. Я могу сказать, однако, что это, по-видимому, не уменьшает количество раз, когда обратимый преобразователь Hibernate получает экземпляр, но он уменьшает количество времени между каждой составляющей. – Derek
Я считаю, что это связано с сеансом hibernate - вы должны убедиться, что для всех вызовов существует только один, поскольку это очень дорогой объект. С '@ Transactional' всегда бывает так, что вы не можете сделать это вручную, с фильтром OpenSessionInView, возможно, другими способами. Также нет причин, чтобы избежать '@ Transactional'. – mrembisz