test d'égualité de la classe Entity
Bonjour, Dans la classe Entity, la méthode equals est surchargé et déclaré en final et définit le comportement d'identification d'une entité. Une entité est donc définie par l'identité de ses attributs n'étant pas listés dans l'attribut excludeFields. La méthode est élégante mais pose certains problèmes. En effet, deux entités peuvent par exemple avoir le même nom, mais ne représenteront pas la même entité. Je viens de me heurter à ce problème avec les constantes d'exploration. Deux composants distincts peuvent avoir chacun une constante nommé "a" de type "Double", ces deux constantes seront pour autant différentes. Hors la méthode ExplorationData.setConstantValue() écrasera la valeur de la première constante au moment d'enregistrer la seconde, en raison de l'utilisation de equals() par ExplorationData. findConstantValue(). Le problème pourrait aussi se présenter avec d'autres entités. Le problème vient du fait que la constant ne possède pas l'association inverse vers le composant père. La résolution simple que je vois est de faire appel à System.identityHashCode pour redonner le comportement par défaut en utilisant le hashcode de la classe Object, et d'avoir donc dans ExplorationData : private ConstantValue findConstantValue(Constant c) { for (ConstantValue constantValue : constantValues) { if (System.identityHashCode(c) == System.identityHashCode(constantValue.getConstant())) { return constantValue; } } log.debug("Constant not found : " + c); return null; } Qu'en pensez-vous ? -- Nicolas Dumoulin Ingénieur d'études - Cemagref, LISC +33 (0)4.73.44.07.29
participants (1)
-
nicolas.dumoulin@cemagref.fr