Fala ae pessoal, boa tarde.
Bem, estou com um Controller do Vraptor 4 contendo um método anotado com @Transaction, porém ele não está dando rollback.
Meu código, resumido, está assim:
@Controller
public class PessoaController {
@Inject private PessoaDao pessoaDao;
@Inject private EnderecoDao enderecoDao;
@Inject private FamiliaDao familiaDao;
@Transaction
public void cadastrarPessoa(Pessoa pessoa) {
try {
enderecoDao.inserir(pessoa.getEndereco()); // executa entitymanager.persist(Endereco);
pessoaDao.inserir(pessoa); // executa entitymanager.persist(Pessoa);
if(pessoa.getFamilia().getID == null) {
familiaDao.inserir(pessoa.getFamilia()); // executa entitymanager.persist(Familia);
}
else {
familiaDao.atualizar(pessoa.getFamilia()); // executa entitymanager.merge(Familia);
}
}
catch(Exception e) {
system.out.println(" Erro no Cadastro de Pessoa = " + e.toString());
}
}
}
Então, se ocorrer um erro (Exception) no momento de cadastrar a Familia os cadastros de Endereço e de Pessoa não dão Rollback. Fiz a mesma coisa em PessoaDao e funcionou numa boa, porém chamar pessoaDao.cadastrarPessoa() e dentro dele fazer Insert/Update de outras tabelas ou chamar outros Daos dentro dele não está me parecendo ser “correto”. Então resolvi anotar o método no Controller com o @Transaction.
Como eu posso resolver isso?
Abraço…