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 :

Left Join Fetch + Critère


Sujet :

Hibernate Java

  1. #1
    Membre confirmé
    Avatar de Manopower
    Inscrit en
    Décembre 2003
    Messages
    516
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 516
    Points : 453
    Points
    453
    Par défaut Left Join Fetch + Critère
    Bonjour,
    voici mon jeu d'essai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Table Livre (id, titre)
    Table Emprunts (id, LIVRE_ID, dateDebut, dateFin)
     
    Livre
    1,'boule et bill'
    2,'les misérables'
     
    Emprunts
    1,1,01/01/2010, 12/01/2010
    2,1,13/01/2010, 24/01/2010
    3,1,25/01/2010, 29/01/2010
    résultat attendu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    List<Livre> :
    livre1.emprunts : [Emprunt1]
    livre2.emprunts : null
    extrait du Mapping :

    livre.hbm.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     <set name="emprunts" inverse="true" lazy="false">
                <key>
                    <column name="LIVRE_ID" precision="22" scale="0" />
                </key>
                <one-to-many class="fr.foo.bar.entite.Emprunt" />
            </set>
    emprunt.hbm.xml : rien concernant le livre puisque pas besoin, dans le projet d'avoir une référence. On utilise toujours un emprunt via son objet Livre

    Je souhaite récupérer les livres et leur emprunts commencés le 01/01/2010
    Je souhaite récupérer tous les livres (même ceux n'ayant jamais eu d'emprunt ou pas d'emprunts le 01/01/2010)

    J'ai donc tenté la requête suivante (dans mon fichier hbm.xml) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    from Livre l
    left join fetch l.emprunts e
    where to_char(e.dateDebut,'YYYYMMDD') = '20100101'
    Cette requête fonctionne bien, mais elle ne me renvoie QUE les livres et leurs emprunts commencés le 01/01/2010, elle ne renvoit pas les autres livres sans emprunts...

    Une idée ?

    merci d'avance !

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Points : 5 059
    Points
    5 059
    Par défaut
    c'est normal non ? dans la requete tu spécifie la date de l'empreint donc tu aura les résultats avec les empreints de cette..
    ajoute uen clause OR si tu veux d'autres empreints sans la date..

  3. #3
    Membre confirmé
    Avatar de Manopower
    Inscrit en
    Décembre 2003
    Messages
    516
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 516
    Points : 453
    Points
    453
    Par défaut
    Je suppose oui que le résultat est normal par rapport à la requête que j'ai écrite, mais je n'arrive pas à formuler la requête permettant d'obtenir le résultat attendu
    (soit TOUS les livres et, pour ceux qui en ont, un SET d'emprunt initialisé avec les emprunts commençants le 01/01/2010)

    une idée de la requête HQL qu'il me faudrait s'il te plait ?

  4. #4
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Points : 5 059
    Points
    5 059
    Par défaut
    Citation Envoyé par Manopower Voir le message
    Je suppose oui que le résultat est normal par rapport à la requête que j'ai écrite, mais je n'arrive pas à formuler la requête permettant d'obtenir le résultat attendu
    (soit TOUS les livres et, pour ceux qui en ont, un SET d'emprunt initialisé avec les emprunts commençants le 01/01/2010)

    une idée de la requête HQL qu'il me faudrait s'il te plait ?
    Si tu prend tous les livres, tu aura forcement dedans les empreints de cette date..

  5. #5
    Membre confirmé
    Avatar de Manopower
    Inscrit en
    Décembre 2003
    Messages
    516
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 516
    Points : 453
    Points
    453
    Par défaut
    oui effectivement et je te remercie pour ta réponse.

    Cependant, en réalité mon mapping est un poil plus complexe que ce jeu d'essai et surtout je n'ai que 5.000 "livres" mais près de 26 millions d'emprunts par an dans ma BDD (Oracle) il faut donc nécessairement que je ne prenne que les emprunts filtrés par date pour ne pas faire exploser ma JVM, le traitement métier derrière servant à faire des stats sur des "emprunts" pour un mois donné et non pas sur l'ensemble des données.

Discussions similaires

  1. [EJBQL] multiple left join fetch
    Par joploya dans le forum Java EE
    Réponses: 0
    Dernier message: 16/11/2011, 09h41
  2. Api Criteria left join fetch sur plusieur table
    Par makroute dans le forum Hibernate
    Réponses: 1
    Dernier message: 16/05/2011, 11h36
  3. LazyInitializationException avec un left join fetch
    Par Maverick_ch dans le forum Hibernate
    Réponses: 0
    Dernier message: 12/03/2010, 16h22
  4. [HQL] Left Join fetch et exists
    Par LittleBean dans le forum Hibernate
    Réponses: 3
    Dernier message: 23/10/2009, 15h41
  5. problème "left join fetch" recup de données associées
    Par ddv_again dans le forum Hibernate
    Réponses: 2
    Dernier message: 19/12/2006, 17h29

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