Hibernate - Problema com inserção

Pessoal,

Encontrei um problema com o hibernate e gostaria de saber se alguem ja passou por isso e já resolveu o problema de forma melhor do que eu resolvi.

É o seguitne.
Tenho obj Cliente, por exemplo, com os campos id e nome.

Pra inserir eu dou um “new Cliente(“Fulano”)”. E mando salvar com “hibernateDAO.saveOrUpdate(objCliente)”. Até aí Ok. O Hibernate pega um id, seta para o meu obj e manda um comando insert.

O problema é que quando retornar erro no insert (saveOrUpdate) eu quero tratar o erro e enviar novamente. Por exemplo, se “nome” fosse unique key, e e “Fulano” já existisse o meu savaOrUpdate iria retornar um erro. Até beleza, tudo funciona. Mas aí eu pego o objCliente e faço objCliente.setNome(“Fulano 2”). e mando novamente saveOrUpdate. Ao invés do hibernate mandar um comando insert, ele manda um update. Porque na primeira tentativa o hibernate já pegou o id e setou para o meu obj, e na segunda tentativa ele entendeu que deveria fazer o update, o q está errado.

A minha solução foi essa:

Object objAux = objCliente.getId;
if (! hibernateDao.saveOrUpdate(objCliente))
objCliente.setId(objAux);

Eu gostaria de saber se existe algo no hibernate que faça esse tratamento automatico, horrivel ter q fazer isso toda vez q eu for dar um saveOrUpdate, mesmo que ele seja uma função genérica…

Agradeço,
Fábio

Nao sei se entendi bem o que vc quer mas se vc colocar o saveorupdate dentro de um bloco try catch acho que ja seria bem melhor do que fazer um if mesmo assim vc nao saberia se o erro foi exatamente sobre a unique. Nao lembro se exite alguma forma de pegar isso no catch utilizando o hibernate mas provavamente deva ter alguma forma

try{ SaveOrUpdate(bah); } catch(HibernateException e) { Insert(bah) }

Na realidade erro de unique foi soh um exemplo… e “if” tbm… no try catch fica melhor tratar… mas n eh esse o caso.

O problema eh q o hibrnate joga para o “id” da minha classe o id que ele calculou pra gravar na tabela, mas como o insert falhou, por um motivo qualquer, esse id ficou perdido e se eu tentar dar um novo saveOrUpdate no meu objeto o hibernate vai achar que é para dar update e não insert, pq ele validade por aquele “id” “lixo” q ele deixou no objeto…

consegui explicar o problema?