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 :

Problème requête JPQL


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Chargé d'affaire
    Inscrit en
    Juin 2012
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 45
    Par défaut Problème requête JPQL
    BONJOUR


    j'ai fais une requête JPQL pour la vérification avant l'insertion d'une nouvelle réservation:

    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
     public  Reservation testReservation(String veh,Date Datestar,Date Datefin){
     
            Query q = em.createQuery("SELECT o FROM Reservation o WHERE o.vehicule.matricule=:veh "
                    + "AND"
                    + "((o.dateDebut BETWEEN :Datestar AND :Datefin)"
                    + "OR"
                    + "(o.dateFin BETWEEN :Datestar AND :Datefin)"
                    + "OR"
                    + "(o.dateDebut<:Datestar AND o.dateFin>:Datefin))");
     
            q.setParameter("Datestar", Datestar, TemporalType.DATE);
            q.setParameter("Datefin", Datefin, TemporalType.DATE);
            q.setParameter("veh", veh);
     
           try{
                         return (Reservation) q.getSingleResult();
             } catch(NoResultException e) 
                {     return null;   }
     
     
         }
    lorsque s’exécute et fait une réservation dans une période déjà existe une erreur s'affiche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Caused by: javax.persistence.NonUniqueResultException: More than one result was returned from Query.getSingleResult()
    	at org.eclipse.persistence.internal.jpa.EJBQueryImpl.throwNonUniqueResultException(EJBQueryImpl.java:1207)
    	at org.eclipse.persistence.internal.jpa.EJBQueryImpl.getSingleResult(EJBQueryImpl.java:722)
    	at DAO.IDAO.testReservation(IDAO.java:733)
    svp, aidez moi!!

  2. #2
    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
    Bonsoir,
    As tu pris le temps de regarder la trace d'erreur ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Caused by: javax.persistence.NonUniqueResultException: More than one result was returned from Query.getSingleResult()
    Ta requête retourne plus d'un resultat alors que tu n'es préparé en sortie qu'à ne récuperer qu'un seul résultat.

  3. #3
    Membre averti
    Femme Profil pro
    Chargé d'affaire
    Inscrit en
    Juin 2012
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 45
    Par défaut
    le problème a été resoulé, en ajoutant :
    catch(NonUniqueResultException ex)
    { return null;}



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      try{
                    return cpt = (Compte) query.getSingleResult();
     
                }
                catch(NoResultException e)
                {     return null;   }
                catch(NonUniqueResultException ex)
                { return null;}

  4. #4
    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 btssouma Voir le message
    le problème a été resoulé, en ajoutant :
    catch(NonUniqueResultException ex)
    { return null;}



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      try{
                    return cpt = (Compte) query.getSingleResult();
     
                }
                catch(NoResultException e)
                {     return null;   }
                catch(NonUniqueResultException ex)
                { return null;}
    Bonjour, pour moi tu ne résous pas le problème ainsi, mais tu le caches simplement, supposons que ce soit une incohérente fonctionnelle,une incohérence de donnée en base je veux dire, il faudrait récupérer le résultat dans une collection et si la taille dépasse 1, alors lever une exception fonctionnelle. Mais si ça te convient ainsi tant mieux.

  5. #5
    Membre averti
    Femme Profil pro
    Chargé d'affaire
    Inscrit en
    Juin 2012
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 45
    Par défaut
    merci Mr DevServlet; stp donnez un exemple pour déterminer la taille!!

  6. #6
    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
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class JpaResultHelper {
        public static Object getSingleResultOrLeveeException(){
            List results = query.getResultList();
            if (results.isEmpty()) return null;
            else if (results.size() == 1) return results.get(0);
            throw new ...;
        }
    }

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

Discussions similaires

  1. Problème requête JPQL
    Par l_informaticien dans le forum JPA
    Réponses: 0
    Dernier message: 02/02/2013, 15h15
  2. problème de requête jpql
    Par javacolas dans le forum JPA
    Réponses: 23
    Dernier message: 07/06/2011, 13h41
  3. Problème requête qui renvoie plusieurs
    Par dai.kaioh dans le forum Langage SQL
    Réponses: 6
    Dernier message: 01/04/2004, 10h07
  4. Problème requête avec UNION et ORDER BY
    Par Yann21 dans le forum Langage SQL
    Réponses: 12
    Dernier message: 12/12/2003, 11h02
  5. Réponses: 8
    Dernier message: 23/10/2003, 16h22

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