@Transactional(propagation=распространение.ТРЕБУЕМЫЙ)


если кто-то может объяснить, что это аннотации делать и когда именно мы ее используем :

@Transactional(propagation=Propagation.REQUIRED)

спасибо

5 74

5 ответов:

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

enter image description here

http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html

Если вам нужно объяснение непрофессионалов использования за пределами того, что предусмотрено в Spring Docs

рассмотрим этот код...

class Service {
    @Transactional(propagation=Propagation.REQUIRED)
    public void doSomething() {
        // access a database using a DAO
    }
}

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

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

управление транзакциями-довольно сложная тема, поэтому, надеюсь, этот упрощенный ответ полезен

в приложениях Spring, если вы включаете поддержку транзакций на основе аннотаций с помощью <tx:annotation-driven/> и аннотировать любой класс/метод с @Transactional(propagation=распространение.Обязательно) затем Spring framework запустит транзакцию и выполнит метод и зафиксирует транзакцию. Если возникло какое-либо исключение RuntimeException, то транзакция будет откатана.

на самом деле пропаганда=пропаганда.Требуется уровень распространения по умолчанию, вам не нужно явно упомянуть об этом.

для получения дополнительной информации : http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html#transaction-declarative-annotations

Весна REQUIRED поведение означает, что same transaction будут использованы если есть уже открыл сделки в текущем контексте выполнения метода bean. если здесь нет существующей транзакции весной контейнер создать новый. Если несколько методов настроены как REQUIRED поведение вызывается вложенным способом им будут назначены различные логические транзакции, но они будут все поделиться же физическая сделки. Короче говоря, это означает, что если внутренний метод вызывает откат транзакции, внешний метод не сможет зафиксировать и также откатит транзакцию

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

читать управление Trasaction для более подробного объяснения.