Должен ли я применить @Transactional(readOnly = true) к простому методу запроса?

Преимущества транзакций известны как ACID: атомарность, согласованность, изоляция и долговечность. В таких методах, как сохранение и обновление, транзакции эффективны, поскольку они поддерживают грязную проверку и различные другие функции.

Кроме того, если для параметра readonly установлено значение true, JPA распознает, что объекты в этой транзакции предназначены только для чтения, и не поддерживает отдельные снимки для обнаружения изменений, тем самым экономя память и обеспечивая преимущества в производительности.

@Transactional(readOnly = true)
public Optional<Adate> getAdateByCalendarId(String calendarId) {
    return adateRepository.findAdateByCalendarId(calendarId);
}

Однако я пришел к выводу, что для чтения (R) в операциях CRUD, за исключением CUD (Создание, Обновление, Удаление), возможно, нет необходимости использовать @Transactional(readonly=true).

Вот краткое объяснение причин:

  1. Добавление @Transactional(readonly=true) к простым запросам можно считать переусложнением разработки.
  2. Я понимаю, что объекты, полученные во время запросов, хранятся в кеше первого уровня, но хранить их в кеше первого уровня нет необходимости.

Хорошего дня🙂 - Кевин

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
1
0
77
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

При использовании 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

Транзакционная аннотация важна, когда мы работаем с несколькими репозиториями внутри одного метода и нам приходится делать это в одной транзакции.

Это важно даже для операций чтения, иначе мы можем получить несогласованные данные из нескольких репозиториев.

Другие вопросы по теме