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 :

[Débutant] Jointures hibernate


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 337
    Par défaut [Débutant] Jointures hibernate
    Bonjour,

    je débute côté hibernate, et je ne comprends pas comment faire des jointures entre plusieurs tables.

    exemple :
    table1
    idTable1
    nom
    prenom
    idTable2_rapporté

    table2
    idTable2
    truc
    chose


    si j'ai une BDD avec 2 tables, dont une contient la clé rapportée de la 2e, comment je fais pour dire à hibernate que la colonne "idTable2_rapporté" est la clé rapportée de table2 ?

    je n'arrive vraiment pas à comprendre le concept.

    et ça me pose des problèmes en requêtes aussi :

    je ne peux pas dire "select * from table1, table2 WHERE table1.idTable2_rapporté = table2.idTable2"

    comment on fait ?!

  2. #2
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 76
    Par défaut
    tu crée une classe Table2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public class table2{
     
    private String  idTable2;
    private String nom;
    private String prenom;
     
    getter et setter....
    }
    tu crée une classe table1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class table1{
     
    private String  idTable1;
    private String nom;
    private String prenom;
    private Table2 idTable2_rapporté;
     
    getter et setter....
    }
    ensuite tu fais le mapping table1.hbm.xml et table2.hbm.xml

    table1.hbm.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    mapping normal avec cette association
     
    <many-to-one name="idTable2_rapporté" class="Table2" cascade="all" column="idTable2_rapporté" unique="true"  />
    table2.hbm.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mapping normal sans association
    voila, besoin d'explications ?

  3. #3
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 337
    Par défaut
    waw super je vais essayer ça !

    donc du coup, côté requêtes, comment on fait ?

    par exemple, si en SQL je dis "select * from table1, table2 WHERE table1.clé_rapportée = table2.clé"

    à quoi sert le "unique=true" dans le hbm ?

  4. #4
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 76
    Par défaut
    ensuite pour récupérer tes données tu as plusieurs choix, le HQL, le SQL ou bien session.load(), ou même une classe générique de DAO.

    tu as tout ici : http://www.hibernate.org/hib_docs/v3/reference/fr/html/

  5. #5
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 337
    Par défaut
    eh bien j'ai choisi de faire un session.createQuery pour récupérer les données.

    mais j'ai un problème : Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object;
    at fr.Test.main(Test.java:88)

    voilà le bout de code qui génère l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    List list = session.createQuery("from Entite as EA inner join EA.adresseIdAdresse").list();
     
     
     if (list.size() > 0) 
     { 	
         Iterator it = list.iterator();
         while(it.hasNext())
         {
        	Entite listeEntite = (Entite)it.next();
        	StringList += "nom : " + listeEntite.getNomEntite();
           	StringList += "ville : " + listeEntite.getAdresseIdAdresse().getAdresseVille();
         }
     }
     System.out.println(StringList);
    visiblement, il ne veut pas caster en Entite, mais avant que je fasse le join avec la table adresse, ça fonctionnait.

    que faut-il faire pour que ça fonctionne ?

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 76
    Par défaut
    voila un exemple

    [code]

    Query q = session
    .createQuery("select p.nameStr,p.fistNameStr,a.statusInt,a.idAdministratorsInt FROM Administrators as a,PersonSheets as p where a.personSheet = p.idPersonSheetInt");
    Iterator<Object> page = q.list().iterator();

    while (page.hasNext()) {
    Object[] o = (Object[]) page.next();
    ActorsList a = new ActorsList();
    a.setFirstNameStr((String) o[0]);
    a.setNameStr((String) o[1]);
    a.setStatusInt((Integer) o[2]);
    a.setIdAdministrateurInt((Integer) o[3]);
    aCollection.add(a);
    }

    [/code ]

    et dis moi si tu t'en sors

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/05/2007, 16h47
  2. Réponses: 6
    Dernier message: 19/03/2007, 20h04
  3. [Débutant] Eclipse + Hibernate
    Par chennuo dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 14/06/2006, 14h07
  4. [SQL Server] [Débutant] Jointure de plusieurs vues
    Par f.le.chat dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 22/05/2006, 10h13
  5. [débutant] Jointure + Count
    Par Yann21 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 28/10/2003, 13h52

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