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

Persistance des données Java Discussion :

[JPQL] Requête JPQL sans résultat dans une appli. Spring


Sujet :

Persistance des données Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 36
    Points : 36
    Points
    36
    Par défaut [JPQL] Requête JPQL sans résultat dans une appli. Spring
    Bonjour
    Je suis entrain de travailler sur une appli en Spring et j 'aié un probleme de requete qui passe bien mais sans récupérer d'objet
    c'est une requete en jointure sur 2 tables une table Chambre et une table LigneReservation qui comprend 2 colonnes debut et fin(une chambre a une date debut de réservation et une date de fin de réservation
    et ce que je voudrais c'est interroger c'est rechercher les chambres qui sont libres à une date donnée c'est à dire une chambre selon une certaine date ne figurant pas dans la ligneReservation
    voici ma requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    @Override
    	public Collection<Chambre> getChambreLibre(Date dateDebut, Date dateFin) {
    		Query qr= em.createQuery("select c from Chambre c left outer join c.ligneResa lr where:debut <= lr.fin and :fin >= lr.fin and lr.chambre is NULL ");
    		qr.setParameter("debut", dateDebut, TemporalType.DATE);
    		qr.setParameter("fin", dateFin, TemporalType.DATE);
    		return qr.getResultList();}
    voici mon formulaire
    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
     
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <%@taglib uri="http://www.springframework.org/tags/form" prefix="f"%>
    <div>
    	<f:form modelAttribute="ligne" method="get"
    		action="chambreLibre">
     
    		<!--  date debut <input type="text" name="dateDebut" />
    		 date fin<input type="text" name="dateFin"/>-->
    		<f:input path="debut" />
    		<f:errors path="debut" cssClass="errors"></f:errors>
    		<f:input path="fin" />
    		<f:errors path="fin" cssClass="errors"></f:errors>
     
    		<input type="submit" value="ok">
    	</f:form>
    </div>
    voici mon controleur
    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
    @RequestMapping(value = "/chambreLibre")
    	public String getChambreLibre(LigneReservation lr, Model model, BindingResult result,
    			 Date dateDebut, Date dateFin) {
     
    		/*
    		 * DateValidator dv = new DateValidator(); dv.validate(lr, result); if
    		 * (result.hasErrors()) { return "selectionChambre"; } else
    		 * model.addAttribute("ligne", new LigneReservation());
    		 * model.addAttribute("chambre", new Chambre());
    		 * model.addAttribute("chambreLibre", metier.getChambreLibre(dateDebut,
    		 * dateFin)); return "panier";
    		 */
    		model.addAttribute("ligne", new LigneReservation());
     
    		model.addAttribute("chambreLibre", metier.getChambreLibre(dateDebut, dateFin));
    		return "chambreLibre";
    ça fait un petit moment que je tourne en rond quelqu'un aurait une idée lumineuse?

  2. #2
    Membre confirmé Avatar de freddou17
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 341
    Points : 566
    Points
    566
    Par défaut
    slt,

    , il ne manquerais pas un espace ?? tu es sur que ta requête passe bien ?
    Peux tu activer le show sql dans ta console et nous transmettre son contenu stp

    ++
    "Aucun de nous ne sait ce que nous savons tous, ensemble."
    Lien vers mon appli Funcash n'hésitez pas à donner votre avis

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 36
    Points : 36
    Points
    36
    Par défaut
    Salut freddou

    je reposte ma requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT c
    FROM Chambre c
    LEFT OUTER JOIN c.ligneResa lr
    WHERE :debut <= lr.fin
      AND :fin >= lr.fin
      AND c IS NULL
    et voici la trace en console
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    janv. 07, 2016 5:10:36 PM org.apache.coyote.AbstractProtocol start
    INFOS: Starting ProtocolHandler ["http-nio-8080"]
    janv. 07, 2016 5:10:36 PM org.apache.coyote.AbstractProtocol start
    INFOS: Starting ProtocolHandler ["ajp-nio-8009"]
    janv. 07, 2016 5:10:36 PM org.apache.catalina.startup.Catalina start
    INFOS: Server startup in 11251 ms
    INFO : fr.res.hot.HomeController - Welcome home! The client locale is fr_FR.
    Hibernate: select chambre0_.numero as numero1_, chambre0_.description as descript2_1_, chambre0_.idHotel as idHotel1_, chambre0_.images as images1_, chambre0_.prix as prix1_, chambre0_.telephone as telephone1_, chambre0_.type as type1_ from Chambre chambre0_ left outer join LigneReservation ligneresa1_ on chambre0_.numero=ligneresa1_.chambre where ?<=ligneresa1_.fin and ?>=ligneresa1_.fin and (chambre0_.numero is null)
    j'ai honte de te dire depuis combien de temps je suis sur cette requête!
    j'ai essayé de combiner plein de trucs mais beaucoup d'erreurs!
    Si tu as une idée lumineuse, je suis plus que preneur
    Thanks

  4. #4
    Membre confirmé Avatar de freddou17
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 341
    Points : 566
    Points
    566
    Par défaut
    tu travailles 2 fois sur la date de fin (dans tes clauses sql), peut-être que la date d'arrivée serait intéressante à gérer
    En plus pour infos il faut que tu prennes en comptes le nombre de nuit

    ++
    "Aucun de nous ne sait ce que nous savons tous, ensemble."
    Lien vers mon appli Funcash n'hésitez pas à donner votre avis

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 36
    Points : 36
    Points
    36
    Par défaut
    tu travailles 2 fois sur la date de fin (dans tes clauses sql), peut-être que la date d'arrivée serait intéressante à gérer
    En plus pour infos il faut que tu prennes en comptes le nombre de nuit
    salut freddou17
    en fait , la gestion du nombre de nuit je la ferais après.
    mais bon le probleme de la requête en soit persiste! franchement je ne la voyaéis pas si prenante cette requête!:aie::aie::aie:

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 36
    Points : 36
    Points
    36
    Par défaut
    salut fredou
    merci pour ton aide, je crois tenir une piste, en fait je crois que je me suis pris la tête dans la mauvaise direction!!!
    ma requête fonctionne en fait et le probleme de l'affichage vient probablement que je ne sais pas comment créer un modèle en spring pour récupérer les objets!
    donc je vais voire du coté de spring!!

  7. #7
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Citation Envoyé par kcirtap.tim Voir le message
    salut fredou
    merci pour ton aide, je crois tenir une piste, en fait je crois que je me suis pris la tête dans la mauvaise direction!!!
    ma requête fonctionne en fait et le probleme de l'affichage vient probablement que je ne sais pas comment créer un modèle en spring pour récupérer les objets!
    donc je vais voire du coté de spring!!

    la requête n'est de toute façon pas correcte d'un point de vue business :
    en supposant que vous voulez offrir une seule chambre au client (pas de changement en cours de séjour)
    une chambre entièrement libre dans la période [début;fin] est une chambre pour laquelle il n'existe aucune réservation dont l'intervalle [r.début;r.fin] a une intersection avec celui de la demande.
    Donc c'est en pseudo code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    select chambre where chambre.pk not in (select reservation.chambre_fk where 
          reservation.debut <= target_debut and target_debut <= reservation.fin -- le début de la reservation est dans la cible Cas 1
    or
          reservation.debut <= target_fin and target.fin <= reservation.fin -- la fin de la réservation est dans la cible Cas 2
    or
          reservation.debut >= target_debut and reservation.fin <= target_fin -- la reservation est totalement dans la cible Cas 3
    or 
          reservation.debut <= target_debut and reservation.fin >= target.fin -- la reservation couvre la cible Cas 4
    )
    à partir de là vous pouvez optimisez : les Cas 2 et le Cas 3 peuvent être réduit à tester si le début de la réservation est dans la cible
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
          reservation.debut >= target_debut and reservation.debut <= target_fin -- le début de la réservation est dans la cible
    et les Cas 1 et 4 sont l'inverse : tester si le début de la cible est dans la réservation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
          target_debut >= reservation.debut and target_debut <= reservation.fin -- le début de la cible est dans la réservation
    votre code original ne couvrait qu'un seul des cas et laissait passer les cas où la "cible couvrait la réservation".

    Ensuite l'autre question qui se pose est : quel est le sens d'avoir des lignes "réservation" dont la chambre est "null" ?
    Le client peut réserver autre chose que des chambres et vous mettez tout dans une seule table ?

    Noter que le problème deviendra beaucoup plus amusant si vous acceptez un nombre N de changements de chambre, N étant par exemple une fonction de la durée totale du séjour du client...
    Il faudra retourner les ensembles de chambres dont l'union des intervalles de date couvre la cible et donc le cardinal est <= N.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 36
    Points : 36
    Points
    36
    Par défaut
    salut JeitEmgie
    Ensuite l'autre question qui se pose est : quel est le sens d'avoir des lignes "réservation" dont la chambre est "null" ?
    Le client peut réserver autre chose que des chambres et vous mettez tout dans une seule table ?
    En fait comme tu l'as compris le but est de récuperer des chambres qui ne sont pas réserver à un moment T! d'ou l'expression chambre is null, qui est sénsée me
    renvoyer une liste de chambre dont les id ne figurent pas dans réservation dans l' intervalle choisie

  9. #9
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Citation Envoyé par kcirtap.tim Voir le message
    salut JeitEmgie

    En fait comme tu l'as compris le but est de récuperer des chambres qui ne sont pas réserver à un moment T! d'ou l'expression chambre is null, qui est sénsée me
    renvoyer une liste de chambre dont les id ne figurent pas dans réservation dans l' intervalle choisie
    l'expression is null dans la clause where renvoie les lignes de réservation qui n'ont pas de chambre, c'est pas tout à fait la même chose…

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 36
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par JeitEmgie Voir le message
    l'expression is null dans la clause where renvoie les lignes de réservation qui n'ont pas de chambre, c'est pas tout à fait la même chose…
    Salut JeitEmgie,
    Désolé pour le retard!
    ah tu penses que c 'est la raison pour laquelle je n'obtiens rien ?
    Comment la tournerait tu? en fait je vois plus comment la tourner cette requête car j'en ai une en jpql qui ne me renvoit rien tandis que il y en a une autre en sql qui elle me renvoit toute les chambres peut importe qu'elles soient réserver ou non!

Discussions similaires

  1. Requête SQL et résultat dans une liste déroulante
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 11/04/2014, 14h02
  2. Réponses: 19
    Dernier message: 03/02/2009, 10h52
  3. Réponses: 2
    Dernier message: 28/02/2007, 20h01
  4. Réponses: 1
    Dernier message: 01/12/2006, 16h19
  5. Réponses: 6
    Dernier message: 13/11/2006, 16h29

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