Преимущества транзакций известны как ACID: атомарность, согласованность, изоляция и долговечность. В таких методах, как сохранение и обновление, транзакции эффективны, поскольку они поддерживают грязную проверку и различные другие функции.
Кроме того, если для параметра readonly установлено значение true, JPA распознает, что объекты в этой транзакции предназначены только для чтения, и не поддерживает отдельные снимки для обнаружения изменений, тем самым экономя память и обеспечивая преимущества в производительности.
@Transactional(readOnly = true)
public Optional<Adate> getAdateByCalendarId(String calendarId) {
return adateRepository.findAdateByCalendarId(calendarId);
}
Однако я пришел к выводу, что для чтения (R) в операциях CRUD, за исключением CUD (Создание, Обновление, Удаление), возможно, нет необходимости использовать @Transactional(readonly=true).
Вот краткое объяснение причин:
Хорошего дня🙂 - Кевин




При использовании spring-data-jpa все методы в ваших репозиториях будут помечены как транзакции, доступные только для чтения @Transactional(readOnly = true) ref: SimpleJpaRepository.
Обратите внимание, что методы, выполняющие операцию без чтения, будут отмечены как @Transactional.
Так что да, вы правы, но этим уже занимается spring
Когда мы работаем с одним репозиторием JPA, нам вообще не нужна транзакционная аннотация. Он применяется по умолчанию:
By default, methods inherited from CrudRepository
inherit the transactional configuration from
SimpleJpaRepository.
For read operations, the transaction configuration
readOnly flag is set to true.
All others are configured with a plain @Transactional
https://docs.spring.io/spring-data/jpa/reference/jpa/transactions.html
Транзакционная аннотация важна, когда мы работаем с несколькими репозиториями внутри одного метода и нам приходится делать это в одной транзакции.
Это важно даже для операций чтения, иначе мы можем получить несогласованные данные из нескольких репозиториев.