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

Hibernate Java Discussion :

Conversion d'une requête sql en critéria


Sujet :

Hibernate Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2015
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2015
    Messages : 31
    Points : 19
    Points
    19
    Par défaut Conversion d'une requête sql en critéria
    Salut!
    J'ai du mal à traduire une requête SQL en critéria.
    Voici le code de la requête:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(*) FROM Utilisateur u WHERE u.flagsup=1

  2. #2
    Membre expérimenté Avatar de Cincinnatus
    Homme Profil pro
    Développeur d'applications métier
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur d'applications métier
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Points : 1 679
    Points
    1 679
    Par défaut
    Citation Envoyé par Makelzauvic Voir le message
    Salut!
    J'ai du mal à traduire une requête SQL en critéria.
    Voici le code de la requête:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(*) FROM Utilisateur u WHERE u.flagsup=1
    Bonjour ,

    Si le problème est le count(*), tu peux utiliser :

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2015
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2015
    Messages : 31
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par Cincinnatus Voir le message

    Si le problème est le count(*), tu peux utiliser :
    Le problème vient du WHERE, j'ai du mal à l'implémenter en critéria.
    voici ma requête en critéria :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public Long nombreUser() {
            CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
            javax.persistence.criteria.Root rt = cq.from(Utilisateur.class);
            cq.select(em.getCriteriaBuilder().count(rt));
            javax.persistence.Query q = em.createQuery(cq);
            return ((Long) q.getSingleResult()).longValue();
        }
    Je veux faire une séléction avec un WHERE, où l'insérer et comment ?

  4. #4
    Membre expérimenté Avatar de Cincinnatus
    Homme Profil pro
    Développeur d'applications métier
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur d'applications métier
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Points : 1 679
    Points
    1 679
    Par défaut
    Citation Envoyé par Makelzauvic Voir le message
    Le problème vient du WHERE, j'ai du mal à l'implémenter en critéria.
    Rien de plus simple pour une égalité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    List<Object> results = getSession().createCriteria(Utilisateur.class)
        .setProjection( Projections.rowCount() )
        .add( Restrictions.eq( "flagsup", 1 )).list();
    
    Long count = (Long)results.get(0);

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2015
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2015
    Messages : 31
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par Cincinnatus Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    List<Object> results = getSession().createCriteria(Utilisateur.class)
        .setProjection( Projections.rowCount() )
        .add( Restrictions.eq( "flagsup", 1 )).list();
    
    Long count = (Long)results.get(0);
    je n'arrive pas obtenir le getSession(), netbean me signale une erreur.

  6. #6
    Membre expérimenté Avatar de Cincinnatus
    Homme Profil pro
    Développeur d'applications métier
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur d'applications métier
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Points : 1 679
    Points
    1 679
    Par défaut
    Citation Envoyé par Makelzauvic Voir le message
    je n'arrive pas obtenir le getSession(), netbean me signale une erreur.
    Et comment obtiens-tu une session Hibernate d'habitude ?

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2015
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2015
    Messages : 31
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par Cincinnatus Voir le message
    Et comment obtiens-tu une session Hibernate d'habitude ?
    Je ne l'ai pas signifié en amont, je travaille avec eclipse link.

  8. #8
    Membre expérimenté Avatar de Cincinnatus
    Homme Profil pro
    Développeur d'applications métier
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur d'applications métier
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Points : 1 679
    Points
    1 679
    Par défaut
    Change le domaine de la discussion alors. Ici c'est le sous-domaine Hibernate...

  9. #9
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
    CriteriaQuery<Long> criteriaQuery = criteriaBuilder.createQuery(Long.class);
    Root<Utilisateur> root = criteriaQuery.from(Utilisateur.class);
    criteriaQuery.select(criteriaBuilder.count(criteriaQuery.from(Utilisateur.class)))
    	.where(criteriaBuilder.equal(root.get("idUtilisateur"), 1));
    Long n = em.createQuery(criteriaQuery).getSingleResult();
    System.out.println(n);
    A+.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2015
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2015
    Messages : 31
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par andry.aime Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
    CriteriaQuery<Long> criteriaQuery = criteriaBuilder.createQuery(Long.class);
    Root<Utilisateur> root = criteriaQuery.from(Utilisateur.class);
    criteriaQuery.select(criteriaBuilder.count(criteriaQuery.from(Utilisateur.class)))
    	.where(criteriaBuilder.equal(root.get("idUtilisateur"), 1));
    Long n = em.createQuery(criteriaQuery).getSingleResult();
    System.out.println(n);
    Il me retourne un produit cartésien et non la valeur attendue.

  11. #11
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    tu dois remplacer 'idUtilisateur' de mon code par 'flagsup'.

    A+.

  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2015
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2015
    Messages : 31
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par andry.aime Voir le message
    tu dois remplacer 'idUtilisateur' de mon code par 'flagsup'.
    Je l'avais déjà essayé,le résultat n'est pas correct.

  13. #13
    Membre expérimenté Avatar de Cincinnatus
    Homme Profil pro
    Développeur d'applications métier
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur d'applications métier
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Points : 1 679
    Points
    1 679
    Par défaut
    Citation Envoyé par Makelzauvic Voir le message
    Il me retourne un produit cartésien et non la valeur attendue.
    Un produit cartésien implique une jointure. Quelle serait-elle avec une seule table ? Ne serait-ce pas plutôt des count pour chaque ligne ?
    Quelle est la requête sql générée ?

  14. #14
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2015
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2015
    Messages : 31
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par Cincinnatus Voir le message
    Un produit cartésien implique une jointure. Quelle serait-elle avec une seule table ? Ne serait-ce pas plutôt des count pour chaque ligne ?
    Quelle est la requête sql générée ?
    Voici la modification que vous m'avez démandé de faire autrefois ( remplacer idutilisateur de ton code par flagsup) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
      public Long nombreUserFlag() {
     
            CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
            CriteriaQuery<Long> criteriaQuery = criteriaBuilder.createQuery(Long.class);
            Root<Utilisateur> root = criteriaQuery.from(Utilisateur.class);
            criteriaQuery.select(criteriaBuilder.count(criteriaQuery.from(Utilisateur.class)))
                    .where(criteriaBuilder.equal(root.get("flagsup"), 0));
            Long n = em.createQuery(criteriaQuery).getSingleResult();
            System.out.println(n);
            return n;
     
        }
    La table où j' effectue ma requête n'est reliée à aucune autre table.
    le problème est que j'ai du mal à traduire cette requête SQL ci-dessous en critéria :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(*) FROM Utilisateur u WHERE u.flagsup=0
    La requête critéria ci-dessus me renvoie 4 utilisateurs dont le flagsup=0 quand j'en ai deux dans la base de données et 9 quand j'en ai 3,d'où j'ai parlé de produit cartésien .

Discussions similaires

  1. Problème de conversion d'une requête Oracle vers SQL serveur
    Par sono77 dans le forum Développement
    Réponses: 1
    Dernier message: 01/02/2012, 15h50
  2. Conversion d'une requête SQL au HQL
    Par Fatemy dans le forum Hibernate
    Réponses: 0
    Dernier message: 24/08/2011, 05h11
  3. Réponses: 1
    Dernier message: 05/11/2008, 13h04
  4. Conversion d'une requête SQL en VBA
    Par Keraccess dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 26/10/2004, 18h33
  5. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 19h38

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