Insert update hibernate

tenho um mapeamento onde

esta da seguinte forma

1 estado n cidades
1 cidade n enderecos
1 endereco n pessoas

Os dados referentes a cidade e endereco se nao tiver no banco incluo,
mas se ja tiver, apenas atualizo .
no caso da cidade quando modifico somente o endereco e mantenho a cidade esta acontecendo de inserir novamente outra cidade com o mesmo nome.
mas a cidade ja cadastrada vem do banco de dados no caso de existir

alguem tem a solucao para que quando nao existir ele atualizar e no caso de nao existir inserir.

session.saveOrUpdate(Object);

Either Session.save(Object) or Session.update(Object) the given instance, depending upon resolution of the unsaved-value checks (see the manual for discussion of unsaved-value checking).
This operation cascades to associated instances if the association is mapped with cascade=“save-update”.

cascade ja esta como save-update

Hibernate:
insert
into
test.endereco
(IDCIDADE, BAIRRO, RUA, CEP)
values
(?, ?, ?, ?)
Hibernate:
update
test.pessoa
set
CEP=?,
NOME=?,
TELEFONE=?,
EMAIL=?,
RG=?,
CELULAR=?,
DATACADASTRO=?,
SITUACAO=?,
SENHA=?,
LOGIN=?,
DATANACIMENTO=?,
PERMISSAODEACESSO=?,
SEXO=?,
CPF=?
where
ID=?

so que toda vez este sql e execultado
nao sei como retirar esse insert e passar ele para update!

descobri o porque de ele estar inserindo uma nova cidade e por que o id da cidade esta como null quando faco a consulta mas nao sei por que ele ta retornando somente o id como null?

Resolvi o problema desta forma
onde tenho

many-to-one
cascade=“save-update” lazy=“false” fetch=“select”

funcionou

Obrigado!