@Transactional в весенней загрузке - PullRequest
0 голосов
/ 04 октября 2019

Эта ссылка: https://www.quora.com/When-should-Spring-Boot-methods-use-the-Transactional-annotation

Четко объясните, что делает @ Transactional , но я до сих пор не понимаю, когда методы Spring Boot должны использовать эту аннотацию:

Например:

У меня есть этот метод:

void addPerson () {// code that calls the DAO layer}

Мой метод будет работать хорошо без аннотации @ Transactional , тогда почему я должен добавить эту аннотацию.

Точнее (при весенней загрузке), в чем разница между:

@Transactional void addPerson () {// code that calls the DAO layer}

и

void addPerson () {// code that calls the DAO layer}

Или Spring Boot автоматически добавляет эту аннотацию, поэтому нам не нужно добавлятьэто к нашим услугам

1 Ответ

0 голосов
/ 04 октября 2019

Вы используете @Transcational, когда одновременные вызовы вашего API могут влиять друг на друга.

Допустим, вы хотите добавить Person (вы извлекаете данные откуда-то, создаете новый Персона из данных и добавить ее в список персон). Давайте предположим, что для создания Person вам необходим атрибут partner, который является другим Person.

Перед созданием Person вы должны найти партнера по Id somehwere и добавить его в новый атрибут Person partner. Но что, если во время всех этих запросов partner, который вы хотели добавить, где-то удаляется (скажем, в базе данных из-за какого-то другого запроса). В итоге у вас не будет запрошенного вами объекта.

Если вы используете @Transactional Spring, то убедитесь, что все необходимые данные в безопасности, до тех пор, пока Транзакция не закончится. Как только он закончится, будет выполнен запрос на удаление от partner, и тогда у вас будет логика удалить его из нового объекта Person . Но это произойдет позже.

Вы используете @Transactional для обеспечения безопасности ваших «Транзакций».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...