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 :

la fonction get****s() générée par hibernate en java ne me récupère pas les données


Sujet :

Hibernate Java

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 25
    Points : 13
    Points
    13
    Par défaut la fonction get****s() générée par hibernate en java ne me récupère pas les données
    Bonjour,

    Je travail en Java et hiernate 3 sous eclipse. J'utilise MySQL en BDD.

    Mon fichier mapping est automatiquement créé par éclipse (présent ci dessous)

    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
     
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
    	"-//Hibernate/Hibernate Mapping DTD//EN"
    	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
     
    <hibernate-mapping package="mtr.bdd">
    	<class
    		name="Commande"
    		table="commande"
    	>
    		<meta attribute="sync-DAO">false</meta>
    		<id
    			name="Id"
    			type="java.lang.Long"
    			column="CommandeId"
    		>
    			<generator class="assigned"/>
    		</id>
     
                    ...
     
    		<set
    			name="Typeetapes"
    			table="cmdetape"
    			cascade="all"
    		>
    			<key column="CommandeId"/>
    			<many-to-many column="NomEtape" class="Typeetape"/>
    		</set>
     
                    ...
     
    	</class>	
    </hibernate-mapping>
    En synchronisant le fichier il me cré le code ci dessous

    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
     
     
    public abstract class BaseCommande  implements Serializable {
     
            ...
     
            public void addToTypeetapes (mtr.bdd.Typeetape typeetape) {
    		if (null == getTypeetapes()) setTypeetapes(new java.util.TreeSet<mtr.bdd.Typeetape>());
    		getTypeetapes().add(typeetape);
    	}
     
             /**
             * Return the value associated with the column: Typeetapes
             */
    	public java.util.Set<mtr.bdd.Typeetape> getTypeetapes () {
    		return typeetapes;
    	}
     
            ...
    }
     
    public Commande extends BaseCommande {
     
            ...
     
    }
    Un peu plus loin, j'effectue le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    Session session = HibernateUtil.currentSession();
     
    Commande cmd = (Commande) session.load(Commande.class, 1L)
    //Jusque la tout ce passe bien, cmd est correctement chargé
     
    Systeme.out.println(cmd.getTypeetape().size());
    //Il m'affiche 0 alors qu'il existe bien des éléments dans la base de données.
    //Pour preuve en exécutant la requete SQL générée par Hibernate mais directement sur MySQL, je trouve 2 (qui est le bon résultat)
    Quelqu'un pourrait il me dire pourquoi cmd.getTypeetape() ne charge pas mais objets ?

    Pour avoir une idée de la base, la voici

    Commande <--n,m------(CmdEtape)-----n,m--> TypeEtape

    Merci

  2. #2
    Membre émérite
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Points : 2 969
    Points
    2 969
    Par défaut
    Salut, il doit y avoir un problème de lazy loading (chargement tardif) : ta collection n'est pas remplie tant que tu ne le demandes pas explicitement ; tu peux jeter un oeil à ces liens pour voir comment mapper des collections : http://www.hibernate.org/hib_docs/v3...llections.html, http://www.hibernate.org/hib_docs/v3...lazyproperties

    Bon développement

  3. #3
    Invité
    Invité(e)
    Par défaut
    Apparemment tu es dans le même genre de cas que moi : http://www.developpez.net/forums/sho...d.php?t=552065

    Le premier qui trouve préviens l'autre..

  4. #4
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Slt,

    Merci pour vos réponses. Mais je n'ai toutjours pas de solution. Les liens que tu m'as envoyés Nesmontou, ne m'aide pas, et pour info il me semble que par défaut lazy = true dans Hibernate 3. De plus j'effectue bien un acces puisque j'appel la méthode size de getTypeetapes(). J'ai aussi essayé en récupérant l'itérator pour voir s'il y avait des objets, mais la aussi, rien du tout.

    Il existe une autre méthode qui consisterait à implémenter moi même les méthodes getTypeetapes() et addToTypeetape() générées par hibernate, mais ce n'est pas terrible surtout quand je sauvegarde mon objet. enfin bref, j'aimerais surtout comprendre pourquoi ça ne marche pas avec le principe que j'ai adopté.

    Blaise1, aucun problème, dès que j'ai une soluce, je t'envoie un message.

    Please, help me again.

    @++

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Essaie de mettre un showsql à true dans ta config hibernate, et regarde ce qu'il fait comme requete, çà donnera peut-être une idée.

  6. #6
    Membre émérite
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Points : 2 969
    Points
    2 969
    Par défaut
    Salut, en effet, lazy="true" par défaut ; il faut donc que tu mettes lazy="false" pour que tes données soient chargées immédiatement

    Attention, à manier avec précaution ; il faut être sûr que tu ne vas pas charger la base complètement

    Bon développement

  7. #7
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Slt,

    Voila, j'ai trouvé.
    En mettant un session.beginTransaction() et un session.getTransaction.commit() en amont et en aval de mes instructions, et tout fonctionne, cool.

    Sinon concernant le lazy = false, je ne suis pas fan. Et en plus c'est claire que c'est dangereux.

    Concernant le show_sql = true, ben oui c'est ce que j'ai fais, c'est pour ça que j'ai pu dire que si j'exécutais la requête directement dans MySQL, que ça marchait.

    Voili voilou.

    @++

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

Discussions similaires

  1. Interprétation des requètes générées par hibernate
    Par pmboutteau dans le forum Hibernate
    Réponses: 2
    Dernier message: 11/02/2015, 10h19
  2. message génére par le code java.lang.NoSuchMethodError:
    Par kanebody dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 12/05/2012, 12h07
  3. Réponses: 8
    Dernier message: 09/05/2009, 00h07
  4. Hibernate ne recharge pas les données
    Par CrazySeb dans le forum Hibernate
    Réponses: 2
    Dernier message: 21/07/2008, 14h57
  5. propriete générée par hibernate
    Par piedsvelus dans le forum Hibernate
    Réponses: 1
    Dernier message: 15/07/2007, 01h13

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