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 :

Passage de JPQL à Criteria API


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de geforce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    1 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 055
    Par défaut Passage de JPQL à Criteria API
    Bonjour,

    je voudrais transformé cette requête de JPQL (qui fait des jointures) vers Criteria API, mais j'ai prouve quelque difficultés vue que je n'ai pas l'habitude de trop manipulés du Criteria quand ces des jointure.

    voilà la requête JPQL que je veux transformés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     public List<TRubriqueVar> ListerRubVarByCourentSociete(String codeSociete){  
     Query query = em.createQuery("select a from TRubriquepfixe a, TRubriqueVar e  where a.codrub=e.rubVarPK.codrub and e.rubVarPK.codeSociete=:codeSociete");
     query.setParameter("codeSociete", codeSociete);
     return query.getResultList(); 
    }
    Merci

  2. #2
    Membre éprouvé
    Avatar de geforce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    1 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 055
    Par défaut
    Bonjour, voilà mon avancement mais j'arrive pas faire une dérniére étape (je crois que je n'est pas bien fait quelque chose !)
    Sa faire une jointure mais sans récupérés les champs de l'autre table (TRubriquepfixe).

    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
     
    public List<CentreComptable> findBySociete() {
     
            CriteriaBuilder cb = getEntityManager().getCriteriaBuilder();
            CriteriaQuery cq = cb.createQuery();       
     
            Root<CentreComptable> from = cq.from(TRubriqueVar.class);
            Join<TRubriqueVar, TRubriquepfixe> societes = from.join(CentreComptable_.societesfk);        
     
     
            CriteriaQuery<CentreComptable> select = cq.select(from);
            select.where(cb.equal(societes.get(Societes_.codeSociete), "ELIT"));        
     
            TypedQuery<CentreComptable> typedQuery = getEntityManager().createQuery(select);
            List<TRubriqueVar> resultList = typedQuery.getResultList(); 
     
    return resultList;
    }
    Merci de vos remarque.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 165
    Par défaut
    Bonjour,

    j'ai une question de débutant (vu que j'en suis un :p) :

    pourquoi transformer tes query JPQL ? tu n'étais pas satisfait du fonctionnement ?
    à quoi cela sert de passer sur du Criteria API ?

  4. #4
    Membre éprouvé
    Avatar de geforce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    1 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 055
    Par défaut
    Tout simplement :

    JPQL :
    1- ce n'est ni du SQL ni de l'objet (pour quoi je vais apprendre ce type de chose barbare qui me servira pas plus que pour du JPQL alors qu'il y meilleur)
    2- en ne peut détecter les erreurs que en Runtime (ça sait pas trais acceptable pour moi)

    Criteria API :
    1- Sa reste de l'objet (100% java ce que j'ai toujours fait)
    2- En peux détecter les erreurs soit dans l'éditeur ou dans la Model s'il y a des changements (en utilisant le méta-model des entity)
    3- Plus flexible et réutilisable (bref parfais pour construire une api perso de base


    voilà,

  5. #5
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Citation Envoyé par geforce Voir le message
    Tout simplement :

    JPQL :
    1- ce n'est ni du SQL ni de l'objet (pour quoi je vais apprendre ce type de chose barbare qui me servira pas plus que pour du JPQL alors qu'il y meilleur)
    2- en ne peut détecter les erreurs que en Runtime (ça sait pas trais acceptable pour moi)

    Criteria API :
    1- Sa reste de l'objet (100% java ce que j'ai toujours fait)
    2- En peux détecter les erreurs soit dans l'éditeur ou dans la Model s'il y a des changements (en utilisant le méta-model des entity)
    3- Plus flexible et réutilisable (bref parfais pour construire une api perso de base


    voilà,
    Pas d'accord avec le point 1 sur JPQL, JPQL = Java Persistent Query Languauge, c'est justement un langage de requête orienté Java, donc Objet...
    Le point 2 de JPQL fonctionne de la même façon via Criteria, si tu orthographies mal le nom d'un attribut d'un objet dans l'appel de ton criteria, ça ne plantera qu'à léxécution. Donc tes arguments ne justifient pas ton choix. Je peux comprendre que tu sois plus à l'aise sur une techno que sur l'autre tout simplement.
    Pour moi les 2 techno ne sont pas du tout exclusives, elles peuvent même se compléter, JPQL prend sa force dans un parcours d'un modèle de persistence à la UML (notation pointée très interessante) alors que criteria c'est pour des requêtes complexes avec combinaison de plusieurs critères, des requêtes fortement dynamiques si tu veux, d'où son nom d'ailleurs...

  6. #6
    Membre éprouvé
    Avatar de geforce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    1 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 055
    Par défaut
    Oui, mais moi j'ai dit Criteria plus Méta-Model (ce qui va faire ça force).

    Dit ce n’est pas tout mais moi je bloc de puis un moment sur le sujet du poste que j'ai lancé (les 2 premier) si quelqu'un peux me filés un petite coup de pousse sa sera pas de refus.

    merci

Discussions similaires

  1. api Criteria Jointure avec Double restriction
    Par lunatix dans le forum Hibernate
    Réponses: 4
    Dernier message: 21/04/2011, 17h20
  2. Jointure avec API Criteria
    Par ginkas31 dans le forum Hibernate
    Réponses: 1
    Dernier message: 05/03/2008, 12h31
  3. API Criteria, charger une jointure, problème bizarre
    Par TiMiD dans le forum Hibernate
    Réponses: 2
    Dernier message: 17/10/2007, 17h06
  4. [Hibernate] Requete basé sur l'API Criteria
    Par K-Kaï dans le forum Hibernate
    Réponses: 16
    Dernier message: 16/06/2006, 16h09
  5. Api Win32 : boutons "qui bougent" au passage de la
    Par Spartan03 dans le forum Windows
    Réponses: 9
    Dernier message: 06/06/2005, 23h52

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