TGViewer
Java Geek Java Geek @java_geek · 2.37K subscribers
Post #466 480
🧠 Зачем использовать @Transactional(readOnly = true)?

Многие добавляют @Transactional(readOnly = true) на сервисные методы просто по привычке. Но давайте разберёмся, что на самом деле даёт этот флаг, и где он реально ускоряет выполнение.

📌 Что делает readOnly = true?

* Подсказывает JPA провайдеру (например, Hibernate), что изменения в сущностях можно не отслеживать (skip dirty checking).
* В некоторых БД может выставить read-only transaction flag, который предотвращает нежелательные изменения (например, в PostgreSQL).
* Может ускорить выборки, особенно при больших графах сущностей.

💡 Пример:


@Service
@RequiredArgsConstructor
public class UserService {

private final UserRepository userRepository;

@Transactional(readOnly = true)
public UserDto getUser(Long id) {
User user = userRepository.findById(id)
.orElseThrow(() -> new EntityNotFoundException("User not found"));
return UserDto.from(user);
}
}


⚠️ Важно:

* readOnly = true не блокирует изменения в БД, если вы явно вызываете save() — это НЕ защита от дурака.
* Hibernate всё равно создаст транзакцию — это не аннотация "без транзакций".

✅ Когда использовать:

* Методы, которые только читают данные и не модифицируют сущности.
* Большие выборки без нужды в lazy-инициализации через сессию.
* Там, где критична производительность чтения.

❌ Когда НЕ нужно:

* Если вы всё равно модифицируете сущности внутри метода.
* Если работаете с @Modifying запросами — Spring их игнорирует при readOnly = true.

📎 Документация Spring @Transactional

👉 @java_geek
  • ❤ 1
  • 👍 1
  • 🔥 1
  • 😱 1
More from @java_geek
  1. Sep 24, 2026Что такое стек-трейс? Стек-трейс (stack trace) представляет собой список вызовов методов в…
  2. Sep 17, 2026Как перебрать элементы LinkedList в обратном порядке, не используя медленный get(index)? Д…
  3. Sep 15, 2026Array vs ArrayList Выбор между Array (стандартным Java-массивом) и ArrayList зависит от сп…
  4. Sep 11, 2026Какова цель ключевого слова final, когда оно используется с переменной? Ключевое слово fin…
  5. Sep 9, 2026☕ Java Tip: Как работает var в Java С версии Java 10 появился ключевое слово var. Оно упро…
  6. Sep 7, 2026Что такое перегрузка методов в Java? Перегрузка методов — это мощный приём, который позвол…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →