[RESOLVIDO] - Spring Transações - Como fazer para

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 );