Olá pessoal
Tenho um trabalho de faculdade na qual tenho que desenvolver um tela de venda onde tenho seguinte caso de uso:
O usuário deverá informar dados na capa da venda tais como cliente e condição de pagamento.
Após informar a capa o usuário poderá informar itens para a venda, no caso uma lista de itens, cada item terá uma chave numérica, uma chave estrangeira transação, produto, quantidade e valor.
Após informar a capa e os itens o usuário terá três opções:
Salvar → Será gravado a capa e os itens, sendo possível o usuário editar essa venda posteriormente, incluindo e excluindo itens.
Fechar compra → Será gravado a capa e os itens e gerado contas a receber com base na condição de pagamento, não será permitido alterar essa venda posteriormente.
Cancelar → Não grava nada e retorna a listagem.
Como devo proceder ao gravar a capa e os itens?
1 - Posso ao ir incluir um item já gravar a capa no banco, e a cada item que incluir persisti-lo no banco.
* Vantagem: se der problema ao incluir um item, os outros poderão ser persistidos.
* Desvantagem: se o usuário clicar em cancelar, não deveria gravar nada, mas a capa e os itens já foram gravador no banco O que fazer?
2 ? Ao usuário clicar em salvar, gravar a capa e percorrer os itens gravando um a um, mas em caso de edição de uma venda eu teria de buscar todos os itens jogar em uma lista para que o usuário desse manutenção, depois excluir os itens do bancos e gravar novamente a lista editada.
* Vantagem: O cancelar funciona pq só será gravado no banco se o usuário salvar
* Desvantagem: Ao editar, o sistema terá de apagar os registros no banco e incluir novamente, pq não saberei se o usuário apagou ou incluiu outro item.
3 ? Fazer como item 1, mas commitar a transação somento quando o usuário clicar em salvar, caso clique em cancelar em dou rollback.
* Vantagem: Parece que funcionaria em todos os casos
* Desvantagem: Ao ler sobre transação com EJB, vi que é altamente não aconselhável tratar transação manualmente, deixando isso com o container.
Estou usando EJB3, e tenho um único SessionBean para venda que está anotado com Stateful
Utilizo duas entidades Venda(Capa) e ItemVenda.
Se alguem poder me dizer qual seria a melhor solução ou dizer outra que resolva, agradeço!
No aguardo!