Conforme o exemplo abaixo, tirado de uma página de discussão do hibernate, após ser alterado o valor de um atributo, o hashcode do objeto será mudado. Até ai, tudo bem.
O que eu nao entendi foi o seguinte: o objeto t foi adicionado ao conjunto. Após ser feito o save, o hash é alterado. Mas ele é o mesmo objeto de memória que está no conjunto…
Por acaso, quando adicionado, ele armazena em algum local o valor hash que o elemento tinha no momento da inclusão?
Thinger t = new Thinger(); // t has no ID yet
Set s = new HashSet();
s.add(t);
s.contains(t); // returns true
session.save(t); // t now has an ID
s.contains(t); // returns false, because t's hash code changed