Dúvida Merge e/ou SaveOrUpdate

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

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

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 [quote]certificadora = new Certificadora();[/quote] ou alteração [quote]certificadora = new Certificadora(ID do registro que vai alterar)[/quote]
… 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 ???

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.