Middle
O que é a anotação @Transactional no contexto do Java?
sobes.tech IA
Resposta da IA
A anotação @Transactional em Java é usada para a gestão declarativa de transações. Permite definir os limites das transações, indicando quais métodos devem ser executados dentro de uma mesma transação.
Principais aspetos:
- Integração: É mais frequentemente usada em conjunto com Spring Framework, EJB ou outros frameworks que fornecem gestão de transações.
- Proxy: O framework cria um objeto proxy que envolve o objeto alvo com métodos anotados. Antes de chamar o método anotado, o proxy inicia a transação, e após a sua execução, ela é confirmada ou revertida dependendo do resultado (se uma exceção for lançada).
- Atributos: Possui vários atributos para configurar o comportamento da transação, tais como:
propagation: define como um método transacional deve comportar-se ao ser chamado de outro contexto transacional. Por exemplo,REQUIRED,REQUIRES_NEW,SUPPORTS,NOT_SUPPORTED,NEVER,MANDATORY.isolation: define o nível de isolamento para a transação. Por exemplo,READ_COMMITTED,READ_UNCOMMITTED,REPEATABLE_READ,SERIALIZABLE.readOnly: indica que a transação é apenas para leitura de dados, o que às vezes permite otimizar o desempenho.timeout: define o tempo de espera para a transação.rollbackForenoRollbackFor: indicam em que exceções a transação deve ser revertida ou não, respetivamente.
Exemplo de uso:
// Exemplo de uso no Spring
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class UserService {
// Este método será executado dentro de uma transação
@Transactional
public void createUser() {
// Lógica para criar utilizador e guardar na base de dados
// Se for lançada uma RuntimeException, o Spring irá reverter a transação
}
// Este método será executado dentro de uma transação com configurações específicas
@Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
public User findUserById(Long id) {
// Lógica de procura de utilizador
return null; // Exemplo
}
}
@Transactional simplifica a gestão de transações, permitindo ao desenvolvedor focar na lógica de negócio, e não na API de baixo nível de gestão de transações (por exemplo, JTA ou JDBC Connection).