On Mon, 4 May 2009 05:15:10 +0200 Tony Chemit <chemit@codelutin.com> wrote:
Salut les lutins,
Dans TopiaEntityAbstract, le code de la méthode hashCode me parrait un peu étrange.
/** * On utilise la date de creation comme hash code, cette date ne varie pas * au cours du temps */ @Override public int hashCode() { int result = getTopiaCreateDate().hashCode(); return result; }
Cela transgresse l'ordre naturel des entités. On devrait toujours avoir
a.equals(b) ==> a.hashCode() == b.hashCode()
Oui, et alors c bien le cas ? si a.equals(b) ca veut dire qu'ils ont aussi la meme date de creation. Ou alors ca veut dire que le equals est mal code, mais pas le hashcode
Est-ce qu'on pourrait changer ça en deportant le calcul du hashCode sur celui du topiaId :
@Override public int hashCode() { int hash = 97 * 7; if (topiaId != null) { hash += topiaId.hashCode(); } return hash; }
Il me semble que ca changera rien. Car de toute facon la date de creation est un sous ensemble du topiaId: topiaId => class#date de creation#random et surtout le hashcode doit etre constant dans le temps, et il me semble que le topiaId, risque de passer de null a quelque chose alors que la date de creation doit toujours etre valide. A verifier tout de meme, mais je pense que ton probleme est ailleurs :) -- Benjamin -------------------- tél: +33 (0) 2 40 50 29 28 email: poussin@codelutin.com () campagne du ruban ascii http://www.codelutin.com /\ pour les mails en ascii