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

JPA Java Discussion :

recupération de donnés d'une table de jointure implicite


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 28
    Par défaut recupération de donnés d'une table de jointure implicite
    Bonjour j'ai utilisé la relation manytomany.
    Je voudrais donc afficher les données de la tables de jointure implicite.
    J'ai la classe Operation
    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
     
    public class Operation {
        @Id
        @GeneratedValue(strategy=GenerationType.AUTO)
        private int idoperation;
     
        private String description;
     
        @ManyToMany(cascade={CascadeType.PERSIST})
        @JoinTable(name="operation_champ",
                      joinColumns={@JoinColumn(name="idchamp")},
                      inverseJoinColumns={@JoinColumn(name="idoperation")})
        private Set<Champ> champs;
     
      //getter et setter
    }
    puis la classe champ
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public class Champ {
        @Id
     
        @GeneratedValue(strategy=GenerationType.AUTO)
        public int idChamp;
     
        private String description;
     
        private String type;
     
        @ManyToMany(mappedBy="champs")
        private Set<Operation> operations;
    }
    Pour résumé je voudrais afficher les données de la table operation_champ que j'ai defini dans la classe Operation par la relation manytomany
    J'ai essayé le code mais malheuresement il affiche les données dans opération
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Iterator iterator = em.createQuery("select o.idoperation, c.idChamp from Operation o join o.champs c").getResultList().iterator();
    while (iterator.hasNext()) {
    Object[] row = (Object[]) iterator.next();
    //System.out.format("[%d,%d]%n", (Long) row[0], (Long) row[1]);
     System.out.println(row[0]+" "+row[1]);
      }

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2007
    Messages : 149
    Par défaut
    Je n'ai pas très bien compris ce que tu souhaites faire, donc arrete moi si je me trompe, mais tu as mapper un many-many et tu souhaites afficher la table de jointure ? A priori ta table de jointure ne va comporter que 2 colonnes, qui seront les id operation et id champs.

    Ta requete est un peu etrange car pour un id operation tu as plusieurs id champs, et pour un id champs plusieurs id operation. Donc au mieux l'orm va te denormaliser ton modèle.

    Tu souhaites afficher la table.. le mieux est surrement de mapper une entité champ_operation.

    Ou alors tu listes l'ensemble de tes opérations et pour chaque tu récupère leur liste de champs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Iterator iterator = em.createQuery("select o from Operation").getResultList().iterator();
     
    while (iterator.hasNext()) {
       Operation op = (Operation) iterator.next();
       for (Champ ch : op.getChamps())
       {
          sysout(op.getId()+" "+ch.getId());
       }
    }

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 28
    Par défaut pas encore résolu
    Salut Oui je pense que vous avez compris c'est une relation many to many.
    Une opération peut comporter plusieurs champ et un champ peut etre dans plusieurs table.
    Donc je veux pour chaque opération afficher tous ces champs correspondant .
    Mais malheureusement avec le code que vous m'avez donné j'ai le meme le résultat avec mon code.

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2007
    Messages : 149
    Par défaut
    Citation Envoyé par khafor Voir le message
    Donc je veux pour chaque opération afficher tous ces champs correspondant .
    C'est pourtant bien ce qui est fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Iterator iterator = em.createQuery("select o from Operation").getResultList().iterator();
     
    while (iterator.hasNext()) {
       Operation op = (Operation) iterator.next();
       sysout("-> Operation : "+op.getId()+" - " + + op.getDescription());
       for (Champ ch : op.getChamps())
       {
          sysout("\t->Champ :"+ch.getId()+" - "+ ch.getDescription());
       }
    }
    Ce code t'affiche tous les champs de chaque opération.

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 28
    Par défaut
    Merci Delwyn votre premier code marche bien j'ai du faire erreur sur la configuration du maping j'avais inverser donc les deux champs dans la déclaration du manytomany.
    Je dois vous aussi que mon code marche bel et bien
    Merci encore.

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

Discussions similaires

  1. Chercher une donnée via une table intermédiaire et multi jointure
    Par Vincent Valentine dans le forum Requêtes
    Réponses: 6
    Dernier message: 05/02/2015, 09h53
  2. Réponses: 6
    Dernier message: 26/04/2012, 07h42
  3. Réponses: 0
    Dernier message: 28/01/2010, 14h02
  4. Copie des données d'une table d'une base Interbase 6
    Par Djedjeridoo dans le forum InterBase
    Réponses: 6
    Dernier message: 02/02/2004, 09h39

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