Escopo da transação declarativa
As @Transaction
anotações Spring e JPA permitem definir o escopo de uma determinada transação de aplicativo.
Portanto, se um método de serviço for anotado com a @Transactional
anotação, ele será executado em um contexto transacional. Se o método de serviço usar vários DAO ou Repositórios, todas as operações de gravação e gravação de anúncios serão executadas na mesma transação do banco de dados.
Primavera @Transactional
A org.springframework.transaction.annotation.Transactional
anotação está disponível desde a versão 1.2 da estrutura Spring (por volta de 2005) e permite definir as seguintes propriedades transacionais:
isolation
: o nível de isolamento do banco de dados subjacente
noRollbackFor
e noRollbackForClassName
: a lista de Exception
classes Java que podem ser acionadas sem acionar uma reversão de transação
rollbackFor
e rollbackForClassName
: a lista de Exception
classes Java que acionam uma reversão de transação ao serem lançadas
propagation
: o tipo de propagação da transação fornecido pelo Propagation
Enum. Por exemplo, se o contexto da transação pode ser herdado (por exemplo, REQUIRED
) ou um novo contexto de transação deve ser criado (por exemplo, REQUIRES_NEW
) ou se uma exceção deve ser lançada se nenhum contexto de transação estiver presente (por exemplo, MANDATORY
) ou se uma exceção deve ser lançada se um contexto de transação atual for encontrado (por exemplo, NOT_SUPPORTED
).
readOnly
: se a transação atual deve apenas ler os dados sem aplicar nenhuma alteração.
timeout
: quantos segundos o contexto da transação deve ser executado até que uma exceção de tempo limite seja lançada.
value
ou transactionManager
: o nome do TransactionManager
bean Spring a ser usado ao vincular o contexto da transação.
Java EE @Transactional
A javax.transaction.Transactional
anotação foi adicionada pela especificação Java EE 7 (por volta de 2013). Portanto, a anotação Java EE foi adicionada 8 anos depois à sua contraparte Spring.
O Java EE @Transactional
define apenas três atributos:
dontRollbackOn
: a lista de Exception
classes Java que podem ser acionadas sem acionar uma reversão de transação
rollbackOn
: a lista de Exception
classes Java que acionam uma reversão de transação ao serem lançadas
value
: a estratégia de propagação, dada pelo TxType
Enum. Por exemplo, se o contexto da transação pode ser herdado (por exemplo, REQUIRED
) ou um novo contexto de transação deve ser criado (por exemplo, REQUIRES_NEW
) ou se uma exceção deve ser lançada se nenhum contexto de transação estiver presente (por exemplo, MANDATORY
) ou se uma exceção deve ser lançada se um contexto de transação atual for encontrado (por exemplo, NOT_SUPPORTED
).
Qual escolher?
Se você estiver usando Spring ou Spring Boot, use a @Transactional
anotação Spring , pois ela permite configurar mais atributos que a @Transactional
anotação Java EE .
Se você estiver usando o Java EE sozinho e implantar seu aplicativo em um servidor de aplicativos Java EE, use a anotação `` @ Transactional` do Java EE.
Para obter mais detalhes sobre como a configuração do nível de isolamento é diferente ao usar as @Transactional
definições Spring ou Java EE , consulte este artigo .
javax.transaction.Transactional
que agora você pudesse usá-lo também em aplicativos Spring sem nenhuma ação adicional. Na IMO, essa foi uma péssima decisão do ponto de vista do design , porque, pela minha experiência, muitos desenvolvedores confundem inconscientemente esses dois em seu código, o que gera problemas posteriormente.