Spring + hibernate и аннотация @Transactionl, как это работает? - PullRequest
2 голосов
/ 28 октября 2010

В чем разница между использованием @Transactional над методом и его неиспользованием?

Я пишу какой-то простой тест, но, похоже, нет никакой разницы.

Я хочу научиться управлятьтранзакция с использованием весны и аннотации.

спасибо всем.

1 Ответ

1 голос
/ 28 октября 2010

Если вы поместите @Transactional поверх метода, каждый вызов метода внутри этого доступа к базе данных (но также каждый вызов метода внутри других методов @Transactional - зависит от того, как вы его настроили) использует только одно соединение с базой данных.Это означает, что вы можете откатить все обновления / вставки, которые произошли в транзакции.Если одно из обновлений / вставок выдает исключение, вы можете откатить все обновления / вставки в транзакции, которые произошли до этого исключения -> целостность данных

Проще говоря, если у вас есть метод @Transactional, который, например, используетSpring JdbcTemplate для выполнения некоторых вставок или обновлений (независимо от того, сколько раз) они будут транзакционными, с точки зрения того, если какое-то исключение выдается или что-то, откат применяется - вы должны прочитать документацию по деталям.

если вы используете @Transactional (распространение = Propagation.REQUIRED) для более чем одного метода, если вы затем вызовете эти методы, все вставки / обновления в базу данных с помощью этих методов будут частью одной большой транзакции.

ВАЖНО: как я упоминал в комментарии, вы не должны вызывать эти методы из того же класса, где они объявлены.Причина в том, что все это основано на вызовах прокси-сервера AOP, что происходит, только если вы создаете экземпляр объекта DAO и вызываете методы @Transactional для объекта.В противном случае это не сработает, и вы, вероятно, не поймете, почему.

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