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
…
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.