Estou com um problema…
Seguindo a situação …
Num sistema em rede que possui uma tela para registro de vendas e pagamentos…
Esta tela está aberta em 2 pcs para a mesma venda…
O problema que estou passando seria que o usuario do primeiro pc dá baixa na venda (efetua o recebimento e salva ) enquanto isso o segundo PC está com a venda aberta em modo de edição… depois de um tempo, o segundo PC resolve fechar e salva a venda…portanto…o recebimento efetuado no primeiro PC desaparece…
Como devo proceder nestes casos? fazer uma espécie de bloqueio de edição?
Olá, passei por este problema, e consegui resolver facilmente, porem utilizando hibernate, se você não utilizar hibernate nem perca tempo lendo abaixo, hehe
voce pode utilizar um atributo em sua classe que verifica a versão do registro
adicione na classe do pedido ou em qualquer uma que precisar dessa verificação um atributo como o abaixo:
@Version
@Column
private int version
e o hibernate irá gerenciar se o registro está sendo editado, se a primeira pessoa fizer uma alteração e clicar em salvar, ele impedirá que a segunda salve, é possível até mesmo retornar essa mensagem ao usuário capituando a OptimisticLockException
qualquer duvida da 1 toque
Você deve definir a política. Mas o mais comum é o pessoal fazer assim:
- Criar um campo de versão na venda;
- Ao carregar a venda na tela, carregue a versão;
- Antes de salvar, verifique se a versão ainda é a mesma. Caso não seja, dê uma mensagem de erro, dizendo que alguém já salvou e impeça a ação de salvar. Normalmente o processo de verificação e salvamento deve ser realizado numa transação, para garantir a atomicidade da operação.
- Após salvar, some 1 ao número da versão.
É o que a tag @Version do Hibernate e do JPA fazem.
Tópico movido para o fórum de persistência.
Ow…galera…obrigado pelas respostas…
Estou usando sim o hibernate porém…não estou usando ainda os annotations… e sim o xmls direto… tem como definir esse “@Version” no xml?
Vou dar uma pesquisada sobre isso…
Caso não tenha como fazer isso, vou seguir a idéia do ViniGodoy que também é uma boa saída…
Mais uma vez , Obrigado
Olá…como me foi sujerido utilizei a tag version contida no hibernate, só que como não utilizo annotations, pesquisei e utilizei essa tag no xml mesmo
que ficou mais ou menos assim no arquivo xml da tabela em questão
<version name="versao_registro">
<column default="1" name="VERSAO_REGISTRO" />
</version>
depois para verificar se ocorreu o problema, basta buscar a exception ocorrida no hibernate do tipo
org.hibernate.StaleObjectStateException … se aconteceu essa exception, é sinal que ocorreu o problema que postei no início do tópico…
Obrigado!