-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 5 posts ] 
Author Message
 Post subject: equals hashcode avec Hibernate3 ?
PostPosted: Tue Jun 28, 2005 4:53 pm 
Newbie

Joined: Sat Jun 18, 2005 5:27 pm
Posts: 13
version hibernate : 3.0.5.
Avec JBossIDE et hibernate tools 3.0 alpha 4a, on arrive facilement à créer nos fichiers de mapping et nos POJO.
Hélas ces POJO (fichiers java) ne sont pas trés riche.
Il manque les méthodes equals et hashcode qui semble être trés important surtout lorsqu'on utilise des collections tel que HashSet.
Ma question est : Existe t-il un outil capable de générer avec Hibernate3 des POJO enrichie de méthode equals, hashcode?
et pourquoi pas avec + de constructeur (un contructeur par copy par exemple)

J'ai vu sous JBossIDE et lorsqu'on est dans la fenetre "artifact generation", qu'il y avait une option : "Use custom templates"
Est-ce que cette option permet d'enrichir nos POJO?
Si oui, ou trouver des Templates?

Merci


Top
 Profile  
 
 Post subject:
PostPosted: Wed Jun 29, 2005 3:16 pm 
Newbie

Joined: Sat Jun 18, 2005 5:27 pm
Posts: 13
Tout est OK, j'ai résolu mon p'tit problème avec la version 4.0M2 de MyEclipse.
voila, voila :)


Top
 Profile  
 
 Post subject:
PostPosted: Fri Jul 01, 2005 10:19 am 
Hibernate Team
Hibernate Team

Joined: Sun Sep 14, 2003 3:54 am
Posts: 7256
Location: Paris, France
J'espère que l'implémentation d'equals et hashcode ne s'appuie pas sur la clée primaire.

_________________
Emmanuel


Top
 Profile  
 
 Post subject:
PostPosted: Sun Jul 03, 2005 6:39 am 
Newbie

Joined: Sat Jun 18, 2005 5:27 pm
Posts: 13
helas oui!

Code:
public boolean equals(Object rhs)
    {
        if (rhs == null)
            return false;
        if (! (rhs instanceof Team))
            return false;
        Team that = (Team) rhs;
        if (this.getId() == null || that.getId() == null)
            return false;
        return (this.getId().equals(that.getId()));
    }


Code:
public int hashCode()
    {
        if (this.hashValue == 0)
        {
            int result = 17;
            int idValue = this.getId() == null ? 0 : this.getId().hashCode();
            result = result * 37 + idValue;
            this.hashValue = result;
        }
        return this.hashValue;
    }



Mai lorsqu'un attribut composant ma clé primaire est changé, le hashcode est recalculé.

Code:
public void setId(java.lang.Integer id)
    {
        this.hashValue = 0;
        this.id = id;
    }


Donc je ne comprend pas pourquoi il ne faut pas que le equals et le hashcode s'appuie sur la clé primaire.
D'autant plus que seul ma clé primaire identifie mes objets.
Je n'ai pas d'autres attributs qui puissent le faire.

Admettons que je construise mon equals et mon hashcode avec des attributs qui ne font pas partie de ma clé primaire. Mon equals n'aura plus aucun sens, non ???


D'aprés ce que j'ai pu comprendre du forum en anglais: Le problème vient des objet "transient" qui n'ont pas encore leur identifiant ???

J'ai peut-être tout faux sur ma façon de faire, alors si quelqu'un pouvait m'éclairsir sur ce sujet, ou m'apporter des conseils...
(un exemple serait la bienvenue).

Merci

PS:la clé primaire que j'utilise est un numéro qui s'incrémente automatiquement.


Top
 Profile  
 
 Post subject:
PostPosted: Wed Jul 06, 2005 3:57 pm 
Hibernate Team
Hibernate Team

Joined: Sun Sep 14, 2003 3:54 am
Posts: 7256
Location: Paris, France
Tu n'as pas le droit de changer la valeur d'un hashCode durant la vie de l'objet
http://www.hibernate.org/109.html

_________________
Emmanuel


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 5 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.