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 :

Caster l'objet retourner par list.get() sur une requete de jointure


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 135
    Par défaut Caster l'objet retourner par list.get() sur une requete de jointure
    Bonjour,

    J'ai un soucis pour caster l'objet retourner par un list.get() après une SELECT exécutant une jointure.

    Voici le code exécuté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Query query = session.createQuery("FROM Users u LEFT JOIN u.Usersaddress");
    List result = query.list();
     
    // RETOURNE 3
    System.out.println(result.size());
    // CAST ERROR
    Users u = (Users)result.get(0);
    La liste contient 3 objets, mais je ne sais pas de quel type caster ces objets pour pouvoir les utiliser...

    J'ai utiliser le pluggin synchronizer dans eclipse pour générer mes fichiers de mapping .hbm.xml, qui génère également les fichiers .java relatif.

    Il s'agit d'une relation one-to-many, 1 Users peut avoir N Adress mais, 1 Adress n'a qu'1 seul Users.

    Les fichiers de mapping pour Users et Usersadress ressemble à ca :

    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
    <hibernate-mapping package="org.nasr.database">
    	<class
    		name="Users"
    		table="users">
    		<meta attribute="sync-DAO">false</meta>
    		<id
    			name="Id"
    			type="integer"
    			column="ID_USER"
    		>
    			<generator class="increment"/>
    		</id>
    
    		<set name="Usersaddress" inverse="true">
    			<key column="ID_USER"/>
    			<one-to-many class="Usersaddress"/>
    		</set>	
    	</class>	
    </hibernate-mapping>
    
    
    
    <hibernate-mapping package="org.nasr.database">
    	<class
    		name="Usersaddress"
    		table="usersaddress">
    		<meta attribute="sync-DAO">false</meta>
    		<id
    			name="Id"
    			type="integer"
    			column="ID"
    		>
    			<generator class="increment"/>
    		</id>
    		<many-to-one
    			name="IdUser"
    			column="ID_USER"
    			class="Users"
    			not-null="true"
    		/>
    	</class>	
    </hibernate-mapping>
    Et tant donné qu'il s'agit d'une relation one-to-many je ne veux pas créer une table de jointure externe, ce qui serait complètement illogique bien que suggeré par hibernate, pourquoi créer une table externe, modifier le schéma d'une base de donnée pour faire fonctionner hibernate... ??? dans le cas de relation many-to-many il va de soit mais pas pour une relation one-to-many ou many-to-one.

    Simplement j'aimerai savoir de quel type casté ces objets... merci !

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(result.get(0).getClass());

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 135
    Par défaut
    Vue que get() renvoie un type Object, si je ne le cast pas et que je demande la classe... ba :

    result.get(0).getClass() -> renvoie Object...

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Par défaut
    Ce n'est pas parce que la méthode get(int) déclare qu'elle renvoie un Object qu'elle ne renvoie que ça. Elle renvoie un objet qui hérite de Object (donc n'importe quoi).

    Dans ton cas ça m'étonnerait fortement que ça renvoie Object.class...

  5. #5
    Membre expérimenté Avatar de welcome_59
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 203
    Par défaut
    Dans son cas result.get(0).getClass() devrait effectivement renvoyer Object, vue la déclaration. 2 possibilités:
    1. Laisser le code tel quel et caster
    2. Utiliser la généricité, et plus besoin de caster

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Par défaut
    La méthode getClass() est évaluée à l'execution et pas à la compilation, donc le type de retour déclaré par get() n'a aucune importance.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    List list = new ArrayList();
    list.add(new Integer(123));
    System.out.println(list.get(0).getClass());
    ce code affiche class java.lang.Integer

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 06/06/2012, 10h26
  2. aide sur une requete avec jointures
    Par astroseb dans le forum Requêtes
    Réponses: 4
    Dernier message: 18/08/2010, 13h59
  3. [MySQL] souci sur une requete avec jointure
    Par fey dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 08/09/2008, 11h11
  4. Besoin d'aide sur une requete avec jointure et MAX()
    Par droog dans le forum Requêtes
    Réponses: 4
    Dernier message: 04/07/2007, 18h23
  5. Pb sur une requete avec jointure droite
    Par crashyear dans le forum Langage SQL
    Réponses: 3
    Dernier message: 06/02/2007, 08h06

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