Выбор ответа Middle Транзакции и @Transactional обновлено

Что даёт readOnly = true

Вопрос

Что даёт @Transactional(readOnly = true) с JPA и Hibernate?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Нет dirty checking и flush, соединение только для чтения. В режиме только для чтения Hibernate ставит FlushMode.MANUAL и не хранит снимки для dirty checking, это экономит память и CPU.

Варианты ответа

  1. Spring запрещает вызовы save и бросает исключение
  2. Нет dirty checking и flush, соединение только для чтенияправильный ответ
  3. База блокирует таблицы на запись до конца транзакции
  4. Ничего: это только документация для читателя кода

Разбор

В режиме только для чтения Hibernate ставит FlushMode.MANUAL и не хранит снимки для dirty checking, это экономит память и CPU. JDBC-соединение получает setReadOnly(true), что некоторые драйверы и прокси используют для маршрутизации. Явного запрета save на уровне Spring нет: изменения просто не будут сброшены (а native UPDATE может пройти или упасть в зависимости от базы). Таблицы никто не блокирует.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.