JPA - Annotation @Version

Galera

Não entendi em quais casos devo utilizar a annotation

   1. @Version  

@Version.
Estou estudando o livro Enterprise JavaBeans 3.0, mas ele não fala nada sobre essa annotation mas vi alguem usando e queria saber o que é …

[url]

http://java.sun.com/javaee/5/docs/api/javax/persistence/Version.html

[/url]
A explicação acima fala fala e nao me diz

Qm puder explicar de maneira clara, agradeço

Até galera !

Bom, vou tentar…

Suponha que você tenha um objeto Pessoa com um campo int version anotado com @Version

Eu e você estamos trabalhando no nosso sistema, que é um cadastro de Pessoas…

Eu e você decidimos atualizar o cadastro de Fulano, então, eu e você pegamos nosso objeto Pessoa do banco de dados e começamos a mecher, só que, como sou mais rápido que você, atualizei primeiro e, neste momento, atualizei o version do objeto persistido…

Assim que você for atualizar, uma exceção será lançada, dizendo que “outra transação”(Eu!) atualizou o objeto ou seu objeto está fora de sincronia com o do banco de dados…

É um jeito mais fácil de fazer lock de dados, sacou?

Eu uso e curto muito… se você tiver uma estrutura bem feita não precisa nem utilizar EntityManager, eu particularmente não uso…

[quote=RaulCarlin]Bom, vou tentar…

Suponha que você tenha um objeto Pessoa com um campo int version anotado com @Version

Eu e você estamos trabalhando no nosso sistema, que é um cadastro de Pessoas…

Eu e você decidimos atualizar o cadastro de Fulano, então, eu e você pegamos nosso objeto Pessoa do banco de dados e começamos a mecher, só que, como sou mais rápido que você, atualizei primeiro e, neste momento, atualizei o version do objeto persistido…

Assim que você for atualizar, uma exceção será lançada, dizendo que “outra transação”(Eu!) atualizou o objeto ou seu objeto está fora de sincronia com o do banco de dados…

É um jeito mais fácil de fazer lock de dados, sacou?

Eu uso e curto muito… se você tiver uma estrutura bem feita não precisa nem utilizar EntityManager, eu particularmente não uso…[/quote]

Obrigado acho q entendi …

só nao entendi o q vc quis dizer aqui: se você tiver uma estrutura bem feita não precisa nem utilizar EntityManager, eu particularmente não uso

o que eu uso entao??? estou iniciando em JPA é um pouco complicado a modelagem / relacionamento.

obrigado RaulCarlin

Eu só uso JPA como anotações para facilitar no desenvolvimento, uso o Hibernate normal, com SessionFactory e etc.

O que quis dizer é que mesmo que você não use o EntityManager e não mantenha seus objetos linkados ao banco, dá pra usar o @Version

obrigado pelas dicas Raul…
abraços

Pessoal, eu entendo comportamento da Annotation @Version. Sei que ao disparar uma atualização no objeto o campo anotado será incrementado automaticamente. Porém estou enfrentando um problema. Quando uso o método merge esse incremento não funciona, e se incrementar manualmente antes do merge ele lancará uma OptimisticLockException (claro!) :frowning:

Alguém sabe por que desse comportamento?