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 :

hibernate-criteria : jointure sur plusieurs tables


Sujet :

Hibernate Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 47
    Points : 38
    Points
    38
    Par défaut hibernate-criteria : jointure sur plusieurs tables
    Bonjour,

    je voulais savoir s'il était possible (et comment faire pour cela) de faire une jointure sur plusieurs tables avec criteria?

    Voici le type de requête que je veux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT BEVA.*
    FROM BE_VOLUME_ACTION BEVA, TYPE_ACTION TAV
    WHERE BEVA.CODE_TYPE_PIECE = TAV.CODE
              ORDER BY TAV.CODE_TRI ASC
    Comment manipuler les objets persistants si il faut le faire ?

    ....je suis nouveau sur ce forum, je connais pas encore très bien le J2EE et ses conventions donc excusez moi si je donne pas trop de détails

    Merci d'avance pour vos réponses...

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141

  3. #3
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 47
    Points : 38
    Points
    38
    Par défaut
    hmmm mouais
    Enfin j'ai lu quelques tutos sur hibernate et criteria et celui-ci en faisait partie.
    Tant pis pour la réponse plus personnalisée

    ++

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Il y a pourtant un exemple de ce que tu veux faire dans le lien que je t'ai donné.

  5. #5
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 47
    Points : 38
    Points
    38
    Par défaut
    15.4. Associations

    Vous pouvez facilement spécifier des contraintes sur des entités liées, par des associations en utilisant createCriteria().

    List cats = sess.createCriteria(Cat.class)
    .add( Restrictions.like("name", "F%")
    .createCriteria("kittens")
    .add( Restrictions.like("name", "F%")
    .list();

    Notez que la seconde createCriteria() retourne une nouvelle instance de Criteria, qui se rapporte aux éléments de la collection kittens.

    La forme alternative suivante est utile dans certains cas.

    List cats = sess.createCriteria(Cat.class)
    .createAlias("kittens", "kt")
    .createAlias("mate", "mt")
    .add( Restrictions.eqProperty("kt.name", "mt.name") )
    .list();

    (createAlias() ne crée pas de nouvelle instance de Criteria.)

    Notez que les collections kittens contenues dans les instances de Cat retournées par les deux précédentes requêtes ne sont pas pré-filtrées par les critères ! Si vous souhaitez récupérer uniquement les kittens qui correspondent à la criteria, vous devez utiliser ResultTransformer.

    List cats = sess.createCriteria(Cat.class)
    .createCriteria("kittens", "kt")
    .add( Restrictions.eq("name", "F%") )
    .setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP)
    .list();
    Iterator iter = cats.iterator();
    while ( iter.hasNext() ) {
    Map map = (Map) iter.next();
    Cat cat = (Cat) map.get(Criteria.ROOT_ALIAS);
    Cat kitten = (Cat) map.get("kt");
    }
    Ca doit être un truc du genre, seulement je ne comprends pas bien comment se passe au niveau des fichiers de mapping hibernate (liaisons one-to-many et quels code rajouter dans ces fichiers), mais aussi comment faire ma jointure à proprement parlé dans mon code.


  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Tu veux dire que tu n'as pas encore écrit tes mappings ?

    Si tes mappings sont écrits et corrects, tu n'as rien à rajouter.

  7. #7
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 47
    Points : 38
    Points
    38
    Par défaut
    sisi ils sont écrit et j'arrive à accéder à mes tables indépendemment les unes des autres.

    "kittens" est le nom d'une table dans l'exemple? et en 15.4, sess.createCriteria(Cat.class).createCriteria("kittens") me créé ma jointure entre ces 2 tables?

    .add( Restrictions.like("name", "F%") rajoute la contrainte que le nom doit commencer par un "F". Je peux aussi faire un order by ça c'est ok.
    C'est juste le principe de la jointure que je pige pas trop dans l'exemple. A la place d'exemples j'aurais bien voulu une règle ou un truc générique genre :

    session.createCriteria(<nomdelaClasse>>).add(etc..)

    Enfin merci pour l'aide en tous les cas

  8. #8
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    kittens est le nom de la collection appartenant à la class Cat.
    on a donc bien un one to many.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    class Cat
    {
      private List<Kitten> kittens;
    }
    C'est plus clair ?

  9. #9
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 47
    Points : 38
    Points
    38
    Par défaut
    ouais ok c'est dans la classe Cat. Le truc c'est que moi je veux pas de ce genre de relation.
    C'est pas grave, il parait qu'on peut utiliser setFetchMode pour créer une jointure entre 2 tables, je vais m'orienter vers cette solution.

  10. #10
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Il y a bien une relation entre deux tables dans l'exemple de Cat et kittens.
    kittens est le nom de la collection (d'objets Kitten) appartenant à Cat.

    On a une relation one to many entre Cat et Kitten.

Discussions similaires

  1. Problème de jointure sur plusieurs tables
    Par papouuu dans le forum Langage SQL
    Réponses: 1
    Dernier message: 25/01/2011, 14h02
  2. [AC-2007] Jointure sur plusieurs tables
    Par Steph0 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 20/01/2011, 08h24
  3. jointure sur plusieurs tables fonctionne pas
    Par jmsch dans le forum Requêtes
    Réponses: 1
    Dernier message: 03/11/2010, 21h55
  4. Jointures sur plusieurs tables
    Par Daibai dans le forum Requêtes
    Réponses: 3
    Dernier message: 17/12/2009, 09h55
  5. Réponses: 5
    Dernier message: 19/06/2009, 16h33

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