Hashcode variant dans Topia
Bonjour, Je pense qu'il y a un gros problème avec les hashcode et les equals Topia du à l'utilisation que l'ont peut en faire dans certaines application. Par exemple: MonEntity entite = new EntityImpl(); Ici, le hashcode est calculé sur une date de creation null donc on renvoit 0. entite = dao.create(entite); le hashcode change. J'ai actuellement l'erreur suivante dans une application: Caused by: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [org.chorem.lima.entity.FinancialPeriodImpl#org.chorem.lima.entity.FinancialPeriod#1336742425698#0.7640494428199309] at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:190) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:143) Et je pense que c'est du à ca. -- Éric Chatellier <chatellier@codelutin.com> Tel: 02.40.50.29.28 http://www.codelutin.com
Le 11/05/2012 15:24, Eric Chatellier a écrit :
Bonjour,
Je pense qu'il y a un gros problème avec les hashcode et les equals Topia du à l'utilisation que l'ont peut en faire dans certaines application.
Par exemple: MonEntity entite = new EntityImpl();
Ici, le hashcode est calculé sur une date de creation null donc on renvoit 0.
entite = dao.create(entite);
le hashcode change. Je me suis emballé en fait. Le hashcode ne change jamais (tant que la date ne change pas) Elle devrait peut-être être "final".
Et le equals depend d'un topiaId qui est null au départ et qui change, mais ca ne doit pas poser de problème. En tout cas, peut être un point à vérifier. -- Éric Chatellier <chatellier@codelutin.com> Tel: 02.40.50.29.28 http://www.codelutin.com
Le 11/05/2012 15:24, Eric Chatellier a écrit :
Bonjour,
Je pense qu'il y a un gros problème avec les hashcode et les equals Topia du à l'utilisation que l'ont peut en faire dans certaines application.
Par exemple: MonEntity entite = new EntityImpl();
Ici, le hashcode est calculé sur une date de creation null donc on renvoit 0.
entite = dao.create(entite);
le hashcode change.
Je ne pense pas. Dans tu fais ton "new EntityImpl();" il y a ce bout de code là exécuté : Date topiaCreateDate = new Date(); dans TopiaEntityAbstract, donc hashCode != 0, non ? Arnaud
Le 11/05/2012 15:36, Arnaud Thimel a écrit :
Je ne pense pas. Dans tu fais ton "new EntityImpl();" il y a ce bout de code là exécuté : Date topiaCreateDate = new Date(); dans TopiaEntityAbstract, donc hashCode != 0, non ? Oui (cf autre message).
N'empeche, lorsque hibernate recharge les objets, s'il les met dans une collections juste avant de faire le setCreateDate, il y a bien un problème là non ? (c'est quand même variant dans le temps). -- Éric Chatellier <chatellier@codelutin.com> Tel: 02.40.50.29.28 http://www.codelutin.com
Le 11/05/2012 15:40, Eric Chatellier a écrit :
N'empeche, lorsque hibernate recharge les objets, s'il les met dans une collections juste avant de faire le setCreateDate, il y a bien un problème là non ? (c'est quand même variant dans le temps).
Oui. Mais la dernière discussion que nous avons eu à ce sujet concluait que nous n'avons pas de meilleur moyen solution pour le moment. Arnaud
participants (2)
-
Arnaud Thimel -
Eric Chatellier