IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

Problème de getter


Sujet :

Hibernate Java

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 19
    Points : 13
    Points
    13
    Par défaut Problème de getter
    Bonjour à tous, voila j'ai un problème qui dure depuis un petit moment et je ne trouve pas la solution.

    Je débute en Hibernate et pour l'instant je modélise deux classes : un Client et un Compte.

    Et pour finir mes deux fichiers de mapping :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    <hibernate-mapping>
     
        <class name="Client" table="client">
     
            <id name="Num_Client" type="int" column="num_client">
                    <generator class="increment"/>                
            </id>
     
    	<property name="Nom" type="string" length="50" column="nom" not-null="true"/>
     
    	<property name="Prenom" type="string" length="50" column="prenom" not-null="true"/>
     
    	<property name="Rue" type="string" length="100" column="rue" not-null="true"/>
     
    	<property name="Ville" type="string" length="50" column="ville" not-null="true"/>
     
    	<property name="CP" type="string" length="5" column="CP" not-null="true"/>
     
            <set name="ListeCompte" inverse="true" cascade="all, delete-orphan" lazy="false">
                <key column="num_client"/>
                <one-to-many class="Compte"/>
            </set>
     
        </class>
     
    </hibernate-mapping>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    <hibernate-mapping>
     
        <class name="Compte" table="compte">
     
            <id name="Num_Compte" type="string" column="num_compte">
                    <generator class="native"/>                
            </id>
     
    	<property name="Type" type="string" column="type" not-null="true"/>
     
    	<property name="Solde" type="float" column="solde" not-null="true"/>
     
            <many-to-one name="Num_Client" column="num_client" not-null="true" class="Client"/>
     
        </class>
     
    </hibernate-mapping>
    Donc mon problème intervient lorsque je veux ajouter un Compte à un de mes Client, je me retrouve avec l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    Hibernate: select max(num_client) from client
    Hibernate: insert into client (nom, prenom, rue, ville, CP, num_client) values (?, ?, ?, ?, ?, ?)
    Le client test2 a été ajouté avec l'id : 1
     
    Chargement du client.
     
    Client d'id1
     
    Création du compte.
     
    Hibernate: select client0_.num_client as num1_0_0_, client0_.nom as nom0_0_, client0_.prenom as prenom0_0_, client0_.rue as rue0_0_, client0_.ville as ville0_0_, client0_.CP as CP0_0_ from client client0_ where client0_.num_client=?
    Hibernate: select listecompt0_.num_client as num4_1_, listecompt0_.num_compte as num1_1_, listecompt0_.num_compte as num1_1_0_, listecompt0_.type as type1_0_, listecompt0_.solde as solde1_0_, listecompt0_.num_client as num4_1_0_ from compte listecompt0_ where listecompt0_.num_client=?
    Ajout du compte au client.
     
    Hibernate: update compte set type=?, solde=?, num_client=? where num_compte=?
    19 mars 2008 10:37:55 org.hibernate.property.BasicPropertyAccessor$BasicGetter get
    GRAVE: IllegalArgumentException in class: Client, getter method of property: Num_Client
    19 mars 2008 10:37:55 org.hibernate.event.def.AbstractFlushingEventListener performExecutions
    Erreur d'ajout de compte : org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of Client.Num_Client
    GRAVE: Could not synchronize database state with session
    org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of Client.Num_Client
            at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:171)
            at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:183)
            at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:3591)
            at org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:3307)
            at org.hibernate.engine.ForeignKeys.isTransient(ForeignKeys.java:181)
            at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:218)
            at org.hibernate.type.EntityType.getIdentifier(EntityType.java:397)
            at org.hibernate.type.ManyToOneType.nullSafeSet(ManyToOneType.java:78)
            at org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:1997)
            at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2371)
            at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2307)
            at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2607)
            at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:92)
            at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250)
            at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:234)
            at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:142)
            at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
            at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
            at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
            at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
            at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
            at Compte.CreateStoreCompte(Compte.java:104)
            at Main.main(Main.java:32)
    Caused by: java.lang.IllegalArgumentException: object is not an instance of declaring class
     
    ...
    Donc voila, d'après mes recherches sur Google, c'est une erreur qui est assez fréquente mais je n'ai pas trouvé de solution ... donc j'en appel à votre expérience dans le domaine d'Hibernate.

    Merci d'avance.

  2. #2
    Membre chevronné

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Points : 1 954
    Points
    1 954
    Par défaut
    Est-ce que tu peux poser un point d'arret sur la methode BasicGetter.get( Object target ) qui jette l'exception et donne nous le toString() des propriétés clazz, method, propertyName et target.

  3. #3
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    Merci de tes conseils. Pour répondre à ton premier post, le fait d'enlever le "_" ne change rien.
    En utilisant le debugger sur mon code je n'apprends rien de plus malheureusement. Et pour ce que tu m'as demandé, je ne peux pas le faire car ce sont des méthodes appartenant aux fichiers Hibernates et non pas à mon propre code...
    Le souçi c'est que je pense réellement que mon mapping est correct mais je ne vois pas d'où peux venir l'erreur si ce n'est justement du mapping (ben oui ma méthode getNumClient est forcément juste donc bon...).

  4. #4
    Membre chevronné

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Points : 1 954
    Points
    1 954
    Par défaut
    Même si le code ne t'appartient pas tu peux poser un point d'arrêt. Après tu peux déclarer au préalable les sources hibernate au niveau d'Eclipse, pour le pas à pas.

    Ce que j'aurais voulu voir c'est sur quoi porte le get et la classe qui est attendue.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 45
    Points : 35
    Points
    35
    Par défaut
    je me demande si c'est pas parce dans ta classe compte tu a "int num_client" et pas "Client client".
    Dans ta classe tu ne travaille pas sur des clé étrangère mais sur des relations d'objets. Les clés étrangères c'est la bdd qui s'en occupe (fichier de mapping hibernate) et dans ce fichier tu dit que num_client est de la classe Client et tu essais d' injecter un int je comprend qu'il n'aime pas


    je n'ai repris que le peu a changer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
     
    public class Compte {
     
     
        private Client client;
     
     
        public Compte (String num_compte, String type, float solde, Client client)
        {
            this.Num_Compte = num_compte;
            this.Type = type;
            this.Solde = solde;
            this.client = client;
        }
     
     
     
     
        public Client getClient () {
            return client;
        }
     
        public void setNum_Client (Client val) {
            this.client = val;
        }
    }
    ps : c'est pas pour embête le monde mais les variables ne commence pas par une majuscule enfin c'est juste une norme

  6. #6
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    J'ai effectué les modifications que tu m'as conseillé mais le souçi c'est que maintenant je n'ai plus de cohérence entre ma classe et mon fichier de mapping.

    En effet maintenant, j'ai l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Initial SessionFactory creation failed.org.hibernate.PropertyNotFoundException: Could not find a getter for numClient in class Compte
    Ce qui est logique puisque l'on a remplacé la méthode getNumClient par getClient, le champs étant devenu un objet et non plus un int ...

    Ma question est la suivante : comment je dois traduire cela dans mon fichier de mapping ?

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 45
    Points : 35
    Points
    35
    Par défaut
    voici un exemple de mapping :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    <class name="compte">
    <id name="id" column="parent_id"/>
    ....
    <set name="client" inverse="true">
    <key column="client_id"/>
    <one-to-many class="Clien"/>
    </set>
    </class>
     
    <class name="Client">
    <id name="id" column="child_id"/>
    <many-to-one name="compte"
    class="Compte"
    column="compte_id"
    not-null="true"/>
    </class>
    pour en savoir plus :http://www.hibernate.org/hib_docs/v3/reference/fr/html/
    section 7 et des exemple section 23

    EDIT : je viens de comprendre ton erreur dans ton mapping de la classe compte change num_client en client.

  8. #8
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    AAAAAAAAAhhhhhhhhhh ca marche

    Un grand merci à toi

    C'est vrai que je raisonnais avec les clefs étrangères mais c'est ce qu'il me semblait avoir vu dans les exemples c'est pour ça.

    Et bien un grand merci, je vais pouvoir finir mon projet pour ... vendredi

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de getters, plantage mémoire
    Par fab87 dans le forum Débuter
    Réponses: 12
    Dernier message: 23/05/2011, 15h15
  2. Problème getters et setters
    Par Balbuzard dans le forum Langage
    Réponses: 5
    Dernier message: 17/02/2011, 16h33
  3. Problème génération C++ getter/setter
    Par Snooker9 dans le forum BOUML
    Réponses: 1
    Dernier message: 15/03/2010, 22h07
  4. Réponses: 3
    Dernier message: 15/05/2009, 14h10
  5. Problème avec un getter
    Par ploxien dans le forum Hibernate
    Réponses: 12
    Dernier message: 29/10/2008, 17h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo