Fórum Update com JPA utilizando valor do banco de dados #485317
12/07/2014
0
Porem estou com uma duvida que esta me levando a usar SQL nativo.
Seguinte, gostaria de fazer um Update para atualizar o saldo de estoque de um produto, sendo assim no SQL puro eu faria assim:
//Existe um sinal de mais entre o saldoestoque e 10, é poque não saiu update produtos set saldoestoque = (saldoestoque + 10);
ou seja atribuiria o valor do saldo de estoque mais o que esta no banco, com o JPA tive que ler o saldo atual, somar em uma variável e depois mandar fazer o update.
Sendo assim se alguém gravar o saldo antes do meu Update no JPA eu gravo um valor errado, e no SQL não gravaria.
Gostaria de ouvir opiniões sobre esta questão.
Obrigado pela atenção.
Fernando Silva
Curtir tópico
+ 0Posts
12/07/2014
Ronaldo Lanhellas
Estude sobre "Lock Otimista / Lock Optimistic" no JPA e você encontrará a resposta. Em resumo, você controla seus objetos através de um "versionamento" e quando você tentar gravar no banco de dados determinado valor, se a versão do objeto mudou desde a última alteração sua então ele não deixará você gravar no banco para garantir a consistência dos dados.
Veja um link sobre o assunto: http://www.objectdb.com/java/jpa/persistence/lock#Optimistic_Locking_
Gostei + 0
12/07/2014
Fernando Silva
Na verdade analisei e estou usando o version do JPA em cadastros e lançamentos do financeiro, mas para o estoque pensei que tinha algo semelhante ao SQL puro, para que eu não tivesse que tratar especificamente, pois se mando via SQL o banco cuida da requisição que chegou primeiro e faz commit e passa para próxima.
Talvez coloque até em uma trigger.
Gostei + 0
16/07/2014
Ronaldo Lanhellas
Gostei + 0
16/07/2014
Fernando Silva
Sim sei exatamente isto, inclusive desativei cache.
Porem considero o tópico resolvido, pois queria algo similar ao SQL, vou estudar e descobrir a melhor maneira, creio que será usar o o version nos objetos, para JPA, ou usar JDBC mesmo.
Obrigado pela atenção.
Gostei + 0
16/07/2014
Ronaldo Lanhellas
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)