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

Java EE Discussion :

Requête de jointure


Sujet :

Java EE

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Points : 13
    Points
    13
    Par défaut Requête de jointure
    Bonjour,
    Est-ce qu'il est possible d'écrire une requêtte qui fait la jointure de plusieurs tables dans une entité bean?
    Que dois-faire si c'est impossible?

  2. #2
    Expert confirmé
    Avatar de Valère
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 334
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2005
    Messages : 1 334
    Points : 4 740
    Points
    4 740
    Par défaut
    Bonjour,

    Quelle version des EJB utilises-tu?

    Valère
    Pensez au bouton
    Je ne répond pas aux questions techniques par email ou MP.

  3. #3
    Membre actif Avatar de kore62
    Profil pro
    Inscrit en
    Août 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 222
    Points : 205
    Points
    205
    Par défaut
    Comme j'ai la meme question.. avec les
    EJB3?
    L'habitude est l'illusion d'un acquis imaginaire...

    Mes Compos Ziks Electros:http://fishbone2k.free.fr/technorulez/news.php?id=89

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Points : 13
    Points
    13
    Par défaut Requête de jointure
    Bonjour,
    j'utilise EJB3 avec netbeans5.5 et sjsas9 comme serveur d'apllication.
    Cordialement heriniaina1

  5. #5
    Expert confirmé
    Avatar de Valère
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 334
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2005
    Messages : 1 334
    Points : 4 740
    Points
    4 740
    Par défaut
    Bonjour,

    C'est tout à fait faisable, il suffit de passer par un objet wrapper qui encapsule les EJB des différentes tables à récupérer.

    Par exemple, si NetBeans vous a créé les EJBs des tables TableA et TableB, alors vous pouvez créer un objet tel que le suivant:

    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
     
    package mypackage;
     
    public class MyWrapper {
        private TableA tableA;
        private TableB tableB;
     
        /** Creates a new instance of MyWrapper */
        public MyWrapper() {
        }
     
        public TableA getTableA() {
            return tableA;
        }
     
        public void setTableA(TableA tableA) {
            this.tableA = tableA;
        }
     
        public TableB getTableB() {
            return tableB;
        }
     
        public void setTableB(TableB tableB) {
            this.tableB = tableB;
        }
     
    }
    Ensuite il faut l'utiliser dans une EJBQuery du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            String query = "SELECT new mypackage.MyWrapper(a, b) "
                    + "FROM TableA a, TableB b "
                    + "WHERE ${condition de jointure}"        
            return emf.createEntityManager().createQuery(query)
    Et vous récupérez une liste de MyWrapper.

    Valère
    Pensez au bouton
    Je ne répond pas aux questions techniques par email ou MP.

  6. #6
    Membre actif Avatar de kore62
    Profil pro
    Inscrit en
    Août 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 222
    Points : 205
    Points
    205
    Par défaut
    Est ce qu'avec Jboss x'est la même chose?? J'utilise EclipseWTP avec un serveur JBOSS4..
    L'habitude est l'illusion d'un acquis imaginaire...

    Mes Compos Ziks Electros:http://fishbone2k.free.fr/technorulez/news.php?id=89

  7. #7
    Expert confirmé
    Avatar de Valère
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 334
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2005
    Messages : 1 334
    Points : 4 740
    Points
    4 740
    Par défaut
    C'est du JPA pur. Pour ma part, j'utilise ce type de code sans serveur applicatif, en J2SE, avec toplink. Je ne pense pas qu'utiliser l'implémentation d'hibernate de JPA pose problème.

    Valère
    Pensez au bouton
    Je ne répond pas aux questions techniques par email ou MP.

  8. #8
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Points : 13
    Points
    13
    Par défaut Requête de jointure
    Bonsoir,
    j'ai essaié ce que valered a dit,je fait comme suit:
    -entité beans(create entity from database ):entités Stage et Theme;
    -Objet wrapper qui encapsule les EJB des différentes tables à récupérer(Stage et Theme)

    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
     
    package com.entity;
    public class test {
        private Stage stage;
        private Theme theme;
     
        public test() {
        }
     
       public Stage getstage() {
            return stage;
        }
     
        public void setstage(Stage stage) {
            this.stage = stage;
        }
     
     
         public Theme gettheme() {
            return theme;
        }
     
        public void settheme(Theme theme) {
            this.theme = theme;
        }
     
          public test(Stage stage,Theme theme) {
            this.stage = stage;  
            this.theme = theme;
        }
    }
    Et pour l'ejbql dans une sessionbean:
    j'ai essai avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    String query = "SELECT new mypackage.MyWrapper(a, b) "
                    + "FROM TableA a, TableB b "
                    + "WHERE ${condition de jointure}"        
            return emf.createEntityManager().createQuery(query)
    mais netbeans ne connait pas createEntityManager() et je fait comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     public List lister() {
     
            String query = "SELECT new com.entity.test(a,b) "
                    + "FROM Stage a, Theme b "
                    + " WHERE   and  a.stgid=b.stgid ";        
           Query squery =em.createQuery(query);
           List resultat = squery.getResultList();
           return resultat;
     
        }
    Mais ce requête ne retourne rien,il y a erreur.
    Que dois-je faire alors?
    je vous remercie.
    Cordialement heriniain_a1

  9. #9
    Expert confirmé
    Avatar de Valère
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 334
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2005
    Messages : 1 334
    Points : 4 740
    Points
    4 740
    Par défaut
    Re,

    Il faut que déclare un entity manager dans ta classe. Dans NetBeans, clic-droit | persistence | use entity manager et NB rajoutte tout ce qu'il faut dans ta classe.

    Valère
    Pensez au bouton
    Je ne répond pas aux questions techniques par email ou MP.

  10. #10
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Points : 13
    Points
    13
    Par défaut requête en ejbql
    Reponse,
    voici la classe sessionbean avec l'entity manager
    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
     
     
    package com.session;
     
    import java.util.List;
    import javax.ejb.Stateless;
    import javax.persistence.EntityManager;
    import javax.persistence.PersistenceContext;
    import javax.persistence.Query;
     
    @Stateless
    public class NewSessionBean implements NewSessionRemote, NewSessionLocal {
     
        @PersistenceContext
        private EntityManager em;
     
     
        public NewSessionBean() {
        }
     
        public void persist(Object object) {
            // TODO:
            // em.persist(object);
        }
         public List listerpourevaluation() {
     
           String query = "SELECT new com.entity.test(a,c) "
                    + "FROM Stage a, Theme c "
                    + " WHERE   and  c.stgid=a.stgid ";   
     
           Query squery =em.createQuery(query);
           List resultata = squery.getResultList();
           return resultata;
     
        }
    }
    et je ne sait pas si dans cette classe de session que je dois rajouter tout ce qu'il faut dans ma classe dont vous avez parlé.
    heriniain_a1

  11. #11
    Expert confirmé
    Avatar de Valère
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 334
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2005
    Messages : 1 334
    Points : 4 740
    Points
    4 740
    Par défaut
    Tu peux effectivement utiliser celle là.

    Valère
    Pensez au bouton
    Je ne répond pas aux questions techniques par email ou MP.

  12. #12
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 17
    Points : 13
    Points
    13
    Par défaut requête de jointure
    Bonsoir,
    j'ai deja utilisé la session NewSessionBean et je cré une classe java(utilbean) dans la partie web pour appelé la session (NewSessionBean) ,je fait comme suit:

    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
    partie de la classe utilbean
    ....
    public List donnerliste(){
            try {           
    Context c = new InitialContext();    
    Object o = c.lookup("java:comp/env/ejb/NewSessionBean ");
    NewSessionRemote NewSessionBean = (NewSessionRemote)PortableRemoteObject.narrow(o,NewSessionRemote.class);
    List liste = NewSessionBean.listerpourevaluation();
    return liste;
            }
            catch(NamingException ne){           Logger.getLogger(getClass().getName()).log(Level.SEVERE,"exception caught" ,ne);
                throw new RuntimeException(ne);            
            }
        }
    ......
    Et en fin dans la servlet, je fait comme suit :
    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
    partie de la servlet
    ........
    
     protected void listessai(HttpServletRequest request,StageBean StageBean)
        throws ServletException, IOException {
          
               try {
                   utilbean.donnerliste();
                    } catch (Exception e){
                   system.out.println("Erreur liste !");
               }
          
        }
    .......
    Et quand je fait le deploiement,il y a erreur si je fait le déboguage c'est la partie listerpourevaluation() de la session bean qui fait des erreurs.
    je ne sait pas donc si c'est ma code dans la servlet et classe utilbean qui ne fonctionne pas ou bien la requette dans la sessionbean?
    Cordialement heriniain_a1

Discussions similaires

  1. Requête avec jointures
    Par Corben dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/11/2004, 12h55
  2. Réponses: 6
    Dernier message: 20/09/2004, 15h26
  3. Mise à jour de table impossible après requête avec jointure
    Par sto dans le forum Bases de données
    Réponses: 5
    Dernier message: 17/03/2004, 13h24
  4. problème de requête avec jointures
    Par tinhat dans le forum Requêtes
    Réponses: 7
    Dernier message: 11/08/2003, 10h33
  5. Réponses: 14
    Dernier message: 17/03/2003, 18h31

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