Junior — Middle
Pode explicar o que se entende por níveis de propagação na gestão de transações?
sobes.tech IA
Resposta da IA
Os níveis de propagação na gestão de transações determinam como uma transação se comporta ao chamar métodos que também podem ser transacionais. Isto é importante para entender se um método usará uma transação existente, criará uma nova ou trabalhará sem transação.
Os principais níveis de propagação no Spring (Java):
- REQUIRED (padrão): se houver uma transação atual, o método aderirá a ela, caso contrário, uma nova será criada.
- REQUIRES_NEW: sempre cria uma nova transação, suspendendo a atual (se existir).
- SUPPORTS: se houver uma transação, o método trabalha nela, caso contrário, sem transação.
- NOT_SUPPORTED: o método sempre é executado sem transação, suspendendo a transação atual.
- MANDATORY: o método deve ser executado em uma transação existente, caso contrário, uma exceção é lançada.
- NEVER: o método não deve ser executado em uma transação, caso contrário, uma exceção é lançada.
- NESTED: se houver uma transação, uma transação aninhada (ponto de salvamento) é criada, caso contrário, uma nova.
Exemplo:
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void saveData() {
// este método está sempre em uma nova transação
}