Hibernate Cache x hascode e equals

Pessoal.

O hibernate quando faz sincronização dos objetos automática ele utiliza os métodos hascode e equals para comparar se o objeto em memória é diferente do objeto da base ?

Minha pergunta é porque tenho lido sobre os métodos equals e hascode nas classes (entity). Não consegui entender a necessidade deles porque em alguns exemplo esses métodos são implementados usando apenas o id e em outros utilizam todos atributos da classe.

Obrigado

hibernate/jpa costuma utilizar o campo anotado com @Id para fazer a consulta na base por id.

A necessidade do equals/hashcode eu vejo mais com componentes web.

Quando sobreescrevo essses metodos hascode e equals numa entity Pessoa não consigo manter a igualdade no selectOneMenu porque considera dois objetos tipo Pessoa diferentes mesmo tendo o mesmo conteúdo.

Como resolvo isso ?

Como está seu equals/hashcode?