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 :

JPA: requette JPQL dynamique


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2010
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 20
    Par défaut JPA: requette JPQL dynamique
    Bonjour,

    j'ai besoin de personnaliser une requette dynamique JPQL (appelée NamedQuery je pense), pour une appliation web avec JPA.
    J'ai lu des tutos mais y'a une partie que j'arrive simplement pas à comprendre: (pour simplifier la question voilà un example)

    j'ai l'entié Parent , et je veux afficher la liste des X Premiers Parents dont X une valeur à saisir et recuperer après au niveau de la page JSP.

    voilà l'entité Parent:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @Entity
    @Table
    @NamedQueries({ @NamedQuery(name = "Parent.getXPremierParent", query = "   SELECT e FROM Parent e WHERE e.ParentId < :x  ")})
     
    public class Parent implements Serializable {
    ...}
    la class ParentDao:
    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
    @Stateless
    public class ParentDao implements ParentDaoLocal {
     
        @PersistenceContext
        private EntityManager em;
     
    ...
        @Override
        public List<Parent> getXPremierParent(int x) {
            return em.createNamedQuery("Parent.getXPremierParent").getResultList();
     
            setParameter("x", x); /* <<<---- JE SAIS PAS SI J'AI LE DROIT DE METTRE CETTE LIGNE*/
     
        } 
    }
    L'interface ParentDaoLocal:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    @Local
    public interface ParentDaoLocal { 
     
    ...    
          List<Parent> getXPremierParent(int x);
     
          }
    Et voila le Servlet:

    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
    @WebServlet(name = "ParentServletJPQLTest", urlPatterns = {"/ParentServletJPQLTest"})
    public class ParentServletTest extends HttpServlet {
     
            @EJB
            private ParentDaoLocal ParentDao;     
     
        protected void processRequest(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
     
            int xParentId = Integer.parseInt(request.getParameter("xParentId"));
     
            List<Parent> Parents = ParentDaoTest.getXPremierParent(xParentId); //?????????
     
            System.out.println(Parents.toString()); //Pour tester.
     
     
            request.setAttribute("Parents", Parents);
            request.getRequestDispatcher("XPremierParent.jsp").forward(request, response);
     
    }

  2. #2
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 8
    Par défaut
    Bonjour,

    Cela fonctionnera mieux en modifiant la méthode getXPremierParent(int x) de ta classe ParentDao :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    @Override
    public List<Parent> getXPremierParent(int x) {
            Query requete = em.createNamedQuery("Parent.getXPremierParent");
            requete.setParameter("x", x);
            return requete.getResultList();
    }
    En effet, getResultList() lance la requête que tu as précisé dans l'entité Parent. Il faut donc affecter le paramètre avant l'appel à cette méthode.

    Owen89

  3. #3
    Membre averti
    Inscrit en
    Février 2010
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 20
    Par défaut
    Merci, ça marche

    (Vous avez mis un = de plus sur Query = requete = em.createNamedQuery("Parent.getXPremierParent")

  4. #4
    Membre averti
    Inscrit en
    Février 2010
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 20
    Par défaut
    Salut,

    J'ai encore une petite question,
    Il parait qu'on peut utiliser des requette SQL simple à la place de JPQL,
    donc si j'avais à le changer en SQL par example, qu'est que j'aurai à changer/enlever/ajouter au code?

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2010
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 58
    Par défaut
    Bonjour

    Pour utiliser des requêtes SQL au lieu de JPQL on peux utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Query query=em.createNativeQuery("SELECT ... FROM ...");
    tu aura plus d'infos ici

    http://www.oracle.com/technetwork/ar...ql-087123.html

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

Discussions similaires

  1. Langage JPQL avec JPA
    Par FuneralRose dans le forum JPA
    Réponses: 2
    Dernier message: 26/05/2012, 11h32
  2. Réponses: 0
    Dernier message: 02/12/2011, 09h10
  3. Réponses: 8
    Dernier message: 25/03/2011, 22h37
  4. [JPA] Formulaire dynamique
    Par Trelazeen dans le forum Struts 2
    Réponses: 9
    Dernier message: 10/06/2009, 11h17
  5. JPQL et requetes dynamiques
    Par skyangel dans le forum JPA
    Réponses: 16
    Dernier message: 30/06/2008, 08h31

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