E aí moçada, beleza?
É o seguinte, estou com um problema e não consegui achar uma solução na net…
Tenho uma classe DAO que usa hibernate. Eu insiro o registro em duas tabelas distintas, mas se der erro em uma das tabelas o que foi salvo deve ser desfeito.
Alguém sabe como fazer isso no DAO com hibernate dentro do JBoss?
see ya
donatinho
São duas entidades mapeadas em tabelas diferentes que precisam estar na mesma transação?
Tenho quase certeza que a maioria dos bancos relacionais são baseados no padrão ACID (Atomicity, Consistency, Isolation, Durability), esse primeiro elemento (Atomicity) permite fazer inserções atômicas, ou seja, só acontecerá a inserção se não ocorrer nenhum erro, se acontecer um erro o banco faz um rollback das alterações.
[quote=donatinho]E aí moçada, beleza?
É o seguinte, estou com um problema e não consegui achar uma solução na net…
Tenho uma classe DAO que usa hibernate. Eu insero o registro em duas tabelas distintas, mas se der erro em uma das tabelas o que foi salvo deve ser desfeito.
Alguém sabe como fazer isso no DAO com hibernate dentro do JBoss?
see ya
donatinho
[/quote]
Mesmo o MySQL que, por padrão, é auto commit, é gerenciado pelo Hibernate sem o auto commit.
Ou seja, quando você insere registros dependentes e, em alguma etapa da transação ocorre erro, todas as ações executadas são removidas via rollback.
Não entendi a tua dúvida.
P.S.: Não posso deixar de comentar. Insero não existe. A conjugação correta, para dar sentido ao que você quis dizer seria insiro.
Pessoal, consegui achar solução para o problema.
Coloquei o meu sistema no container do JBoss e passei a usar EJB. Com isso, consegui “controlar” a transacao sem precisar alterar o meu mapeamento de hibernate ou configuracao dele.
Bastando colocar required para o ejb Local que se der erro na transacao e ja tiver inserido em uma tabela, o contexto do jboss / ejb permite o rollback.
Obrigado pela ajuda.
see ya
donatinho