se alguém puder explicar o que esta anotação faz e quando exatamente a usamos:
@Transactional(propagation=Propagation.REQUIRED)
obrigado
java
spring
annotations
Adil
fonte
fonte
Respostas:
Quando a configuração de propagação é PROPAGATION_REQUIRED, um escopo de transação lógica é criado para cada método no qual a configuração é aplicada. Cada um desses escopos de transação lógica pode determinar o status somente de rollback individualmente, com um escopo de transação externo sendo logicamente independente do escopo de transação interno. É claro que, no caso do comportamento padrão de PROPAGATION_REQUIRED, todos esses escopos serão mapeados para a mesma transação física. Portanto, um marcador apenas de reversão definido no escopo da transação interna afeta a chance da transação externa de realmente confirmar (como você esperaria).
http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html
fonte
Se você precisar de uma explicação leiga sobre o uso além da fornecida no Spring Docs
Considere este código ...
Quando doSomething () é chamado, ele sabe que deve iniciar uma transação no banco de dados antes de executar. Se o chamador desse método já iniciou uma Transação, este método usará a mesma Transação física na conexão de banco de dados atual.
Essa
@Transactional
anotação fornece um meio de informar ao seu código quando ele é executado que ele deve ter uma Transação. Ele não será executado sem um, portanto, você pode fazer essa suposição em seu código de que não ficará com dados incompletos em seu banco de dados ou terá que limpar algo se ocorrer uma exceção.Gerenciamento de transações é um assunto bastante complicado, então espero que esta resposta simplificada seja útil
fonte
@Transactional
à sua camada de serviço, não há mais requisitos para adicionar também@Transactional
aos métodos DAO que estão sendo chamados dentro dessa transação.doSomething()
invoca um outro método aninhado sem nenhum @transactional, essa mesma transação se aplicará a esse método de invocação também?Em aplicativos Spring, se você ativar o suporte a transações baseadas em anotação usando
<tx:annotation-driven/>
e anotar qualquer classe / método com @Transactional (propagation = Propagation.REQUIRED) , o framework Spring iniciará uma transação e executará o método e confirmará a transação. Se ocorrer alguma RuntimeException, a transação será revertida.Na verdade, propagation = Propagation.REQUIRED é o nível de propagação padrão, você não precisa mencioná-lo explicitamente.
Para mais informações: http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html#transaction-declarative-annotations
fonte
Para entender as várias configurações e comportamentos transacionais adotados para o gerenciamento de transações, como
REQUIRED
,ISOLATION
etc. , você terá que entender os fundamentos do próprio gerenciamento de transações.Leia Gerenciamento de tração para obter mais explicações.
fonte