Olá, pra aprender java, estou desenvolvendo uma aplicacao web que permite profissionais ter um sistema pra gerenciar seu escritorio. O profissional cria o seu perfil, e cria seu escritorio, tipo uma fanpage. Estou com uma exception de lookOtimista:
Esse escritorio tera acesso a todos os Perfis cadastrados na aplicacao. Chamei todos os clientes de Perfil, e os Perfis que sao clientes do seu Escritorio, de Cliente. O Escritorio terá acesso a todos os Perfis, mas não saberá se esses perfis são clientes de outros escritorios, só saberá se é ou não seu cliente.
Alem de Cliente, o Escritorio terá tambem Orcamentos, entre outros.
Entao, quando o Escritorio gerar um Orcamento , ele tera que adicionar um Cliente nesse Orcamento. Minha logica faz com que, o Escritorio busque o Perfil, e verifique se esse Perfil é seu Cliente, se nao for, ele adiciona esse Perfil a lista de seus Clientes.
Problema: Acesso o Escritorio, abro um novo Orcamento, e busco um Perfil e verifico se ele é Cliente, senao adiciono um novo Cliente, entao preencho o orcamento, e salvo, da certo. Clico em novo Orcamento, insiro outro cliente, salvo, da certo.
Mas quando clico em NOVO Orcamento, e escolho o mesmo Cliente do Orcamento anterior, ele da a javax.persistence.OptimisticLockException.
Quando eu busco o cliente a primeira vez, como ha de se esperar, ele busca no db, mas na segunda, ele já pega no cache.
Nao pus o codigo, porque acho que nao estou conseguindo resolver porque me falta alguns conceitos, se eu entender melhor o conceito, acredito que consigo achar o erro.
MInhas duvidas: 1) Quando eu salvo um objeto que ja estava no cache, alterando sua versao, ele salva no db e atualiza a versao do seu equivalente no cache? 2) Quando eu busco esse objeto que acabei de salvar, ele busca no db, ou no cache? Como fica a versao dele? 3) O fato do hibernete manter um objeto no cache pode ser fonte de OptimisticLockException? 4) Uso o springMVC, e JSF. As servlet CONTROLLERS, sao gerenciadas e injetadas pelo spring. Ë possivel, eu acessar o objeto que abstrai o cache do hibernate que esta vinculado a sessao do ClienteController? Se sim, como faço pra acessar todos os atributos e metodos desse objeto? Pra por exemplo, eu zerar o cache via codigo!
Antecipadamento agradeco pela resposta...