Dúvida Merge e/ou SaveOrUpdate

3 respostas
tiago_86

Pessoal, sou meio iniciante em java e estou com a seguinte dúvida:

Estou utilizando Hibernate e tenho uma tela de cadastro e quero usar um método só de salvamento, tanto numa alteração quanto numa inclusão … por isso estou utilizando o “Merge” ou “SaveOrUpdate”. Porém (em qualquer um dos dois) só faz a alteração dos dados se na criação da minha classe que vou gravar, eu passar o ID dela:

senão passar o ID ele inclui um registro novo … mesmo se os dados já existirem no banco …
Consegui resolver isso, guardando o ID num JLabel e depois qdo vou criar a classe eu verifico se ta preenchido ou não, mas acho essa maneira meio ruim ou até errada …
Alguém poderia me dizer se é assim mesmo ou se tem alguma maneira melhor ou certa de fazer isso ???

Valeww

3 Respostas

Giulliano

Cara eu não entendi o que vc quis dizer com “salvamento”

mas para tentar ajuda-lo…o Merge é a mesma coisa que o update / insert do sql a diferença é que ele “atropela” o cache do hibernate tanto o primeiro quanto o segundo…

já o save do hibernate vai verificar o objeto na sessão antes de fazer uma alteração no BD

Quanto ao problema do ID é claro que se vc passa um ID o hibernate entende que o registro já existe portanto atualiza…se vc não passa nada é o mesmo que criar um registro novo

tiago_86

Giulliano valew pela resposta !!! mas o save do hibernate não funcionou :cry:

mas vou explicar melhor minha situação  tenho um botão “Salvar” que quero que sirva, tanto para a alteração, quanto para a inclusão de um registro  no código desse botão “Salvar” eu instancio a classe:

inclusão <blockquote>certificadora = new Certificadora();</blockquote>  ou alteração <blockquote>certificadora = new Certificadora(ID do registro que vai alterar)</blockquote> faço os “set’s” e depois salvo (com qualquer um dos 3: Merge, SaveOrUpdate ou Save)

só que ter que ficar controlando esse ID “na mão” através de um JLabel é o que esta me incomodando  será que estou instanciando a minha classe no momento errado ???
marcelo_mococa

o método SaveOrUpdate se comporta da maneira como você disse.
Ele verifica o identificador do objeto. Caso ele exista ocorre o update.

O merge é utilizado para atualizar objetos que estão Detached.

Resumindo…
a solução é controlar os ID’s. Não vejo problema nisso.

Criado 15 de agosto de 2007
Ultima resposta 15 de ago. de 2007
Respostas 3
Participantes 3