Escopo da transação declarativa
As @Transactionanotaçõ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 @Transactionalanotaçã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.Transactionalanotaçã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
noRollbackFore noRollbackForClassName: a lista de Exceptionclasses Java que podem ser acionadas sem acionar uma reversão de transação
rollbackFore rollbackForClassName: a lista de Exceptionclasses Java que acionam uma reversão de transação ao serem lançadas
propagation: o tipo de propagação da transação fornecido pelo PropagationEnum. 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.
valueou transactionManager: o nome do TransactionManagerbean Spring a ser usado ao vincular o contexto da transação.
Java EE @Transactional
A javax.transaction.Transactionalanotaçã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 @Transactionaldefine apenas três atributos:
dontRollbackOn: a lista de Exceptionclasses Java que podem ser acionadas sem acionar uma reversão de transação
rollbackOn: a lista de Exceptionclasses Java que acionam uma reversão de transação ao serem lançadas
value: a estratégia de propagação, dada pelo TxTypeEnum. 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 @Transactionalanotação Spring , pois ela permite configurar mais atributos que a @Transactionalanotaçã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 @Transactionaldefinições Spring ou Java EE , consulte este artigo .
javax.transaction.Transactionalque 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.