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 :

Criteria Join SubQuery


Sujet :

JPA Java

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Points : 100
    Points
    100
    Par défaut Criteria Join SubQuery
    Bonjour,

    Afin d'éviter de la maintenance, je tente de porter pas mal de requête SQL en JPA pour utiliser des blocs de requêtes un peu partout dans mon appli.
    Posé comme çà c'est peut-être pas très clair.
    Avec un exemple ce sera mieux.

    J'ai un objet Commande avec un client, un numéro et une date de commande :

    J'ai ensuite pour chaque commande divers articles.
    Un article est représenté par un produit, un prix et lié à une commande.

    Un produit est représenté par un nom.

    quand j'affiche mes commandes, j'aimerai avoir le total ce celle-ci, je parcours donc les articles de ma commande et je somme les prix et j'affiche le total, ce qui donne en SQL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select commande.numero, commande.dateCommande, commande.client, totalCommande from commandes left join ( select article.commandeId, sum(article.prix) as totalCommande from articles group by article.commandeId)
    J'ai donc externalisé ma requête me retournant le total de la commande.
    L'idée est de pouvoir la réutilisé à plusieurs endroits dans mon application.

    J'ai donc créer une @NamedQuery sur mon objet article.
    Le problème est maintenant de pouvoir l'appeler de partout, mais surtout de la linker aux autres requêtes existantes.

    j'ai réussi à l'écrire en JPA avec l'API Criteria, donc je suis ouvert sur la solution soit en utilisant du JQL, soir SQL, soit Criteria.

    D'avance merci,

    HadanMarv

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Points : 100
    Points
    100
    Par défaut
    Ma question est-elle suffisamment clair ?

    Commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ID | Client       | DateCommande
    1  | Dupont Henry | 01/05/2012
    2  | David Gérard | 03/05/2012
    Article
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ID  | Produit_Id | Prix  | CommandeId
    1   |  1         | 25    | 1
    2   |  2         | 75    | 1
    3   |  3         | 6900  | 2
    Produit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ID | Nom
    1  | Top Bloc
    2  | Feu arrière à Led
    3  | FZ6
    Ecran des commandes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Client : Dupont Henry
    Commande passé le : 01/05/2012
    Total Commande : 100
     
    Client : David Gérard
    Commande passé le : 03/05/2012
    Total Commande : 6900
    Le total de la commande est obtenu par la requête mentionné dans le précédent post.
    Ainsi on peut créer sur l'objet Commande créer une named query du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @NamedQuery {
      name = "totalCommande"
      value = "select sum(a.prix) as totalCommande from Article a where a.commande = :commande"
    }
    Voilà j'espère qu'avec ces éléments supplémentaires c'est plus clair.

    HadanMarv

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Points : 100
    Points
    100
    Par défaut
    Le but est donc maintenant de savoir ou pouvoir écrire quelques choses du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @NamedQuery {
      name = "CommandeById"
      value = "select c.ID, c.Client, c.DateCommande, totalCommande from Commande c left join " + totalCommande + " where c.ID = :commande"
    }
    D'avance merci
    HadanMarv

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Points : 100
    Points
    100
    Par défaut
    Ce type de problématique ne parle à personne, ou est incompréhensible, ou pire encore irréalisable actuellement ?

    HadanMarv

  5. #5
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    désolé si j'ai mal compris, mais il n'est pas plus simple de faire quelquechose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select commande.numero, commande.dateCommande, commande.client, sum(article.prix) from commandes commande join commande.articles article group by commande.id
    ???
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

Discussions similaires

  1. JPA Criteria JOIN et ON
    Par ArchiMonD dans le forum JPA
    Réponses: 2
    Dernier message: 06/03/2014, 12h09
  2. Criteria,FetchMode.JOIN et collection
    Par Eccoon dans le forum Hibernate
    Réponses: 2
    Dernier message: 11/03/2009, 14h00
  3. Hibernate Criteria Subquery
    Par noumian dans le forum Hibernate
    Réponses: 0
    Dernier message: 03/12/2008, 20h51
  4. Criteria force inner join
    Par grizzz dans le forum Hibernate
    Réponses: 0
    Dernier message: 18/09/2008, 14h19
  5. utiliser Criteria pour un JOIN WITH
    Par Naeco dans le forum Hibernate
    Réponses: 2
    Dernier message: 24/06/2008, 17h28

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