Bom dia!
Pra ser curto e grosso, suponha que em um método quelquer, e nele eu tenha que persistir 2 classes.
aí eu persisto a classe x e a classe y
No decorrer do método dá erro e eu preciso dar rollback nas duas classes persistidas anteriormente.
Tem como?
Se o spring estiver controlando as transações no método (@Transactional) ele irá dar rollback quando ocorrer qualquer runtime exception, por default.
Você pode configurar as propriedades rollbackFor ou noRollbackFor para definir as exceptions.
oi
eu acho que você pode fazer o seguinte
[code]DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
TransactionStatus status = txManager.getTransaction(def);
try {
// execute your business logic here
}
catch (MyException ex) {
txManager.rollback(status);
throw ex;
}
txManager.commit(status);[/code]
Mais informações na documentação
Valeu Bruno Valeu André!
Fiz da forma que o André falou.
Show!!!
Legal mas acho que não precisa. O spring já faz isso por você… é só usar a anotação @Transactional. Você pode definir propagação, isolação e rollbacks. Basta configurar o spring da forma correta e seu código vai ficar mais limpo.
Para configurar o spring, coloque o namespace
xmlns:aop=“http://www.springframework.org/schema/aop”
e adicione o schema location:
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
Depois, basta:
tx:annotation-driven/
Você pode usar a anotação @Transactional na sua classe ou métodos. Além disso, você pode definir readOnly = true para não existir persistência de dados.
@Transactional
public abstract User saveUser( User user );