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 :

Implémentation d'une collection de collection


Sujet :

Hibernate Java

  1. #1
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 92
    Points : 70
    Points
    70
    Par défaut Implémentation d'une collection de collection
    Bonjour,

    J'ai découvert Hibernate il y a peu et j'essaie d'implémenter une sorte d'espace client. Pour simplifier, j'ai des Projets constitués de Fichiers qui peuvent être consultés par différents Types d'Utilisateurs. Un Projet possède donc plusieurs Fichiers qui peuvent être visibles par plusieurs Types.
    J'ai donc une relation 1 vers N pour de Projet vers Fichier et N vers N entre Fichier et Type.

    Voici le MPD simplifié de mon modèle :


    J'aimerais récupérer tous les Fichiers d'un Projet donné qui correspondent au Type 1.
    Ce n'est pas très dur en SQL avec une requête du type :
    SELECT *
    FROM fichier f, fich_type ft, type t
    WHERE f.id_fich = ft.id_fich
    AND ft.id_type = t.id_type
    AND f.id_prj =3
    AND t.id_type =1

    Mon problème est que j'aimerais bien pouvoir récupérer ces Fichiers en appelant une méthode du style monProjet.getFichier(type). Je ne sais pas comment faire ça puisque Hibernate me masque la couche d'accès aux données. Mon POJO (ma classe Projet) possède une méthode getFichier() qui me retourne une collection de tous les Fichiers d'un Projet.
    A part créer une méthode getFichier(type) dans ma classe Projet et faire à chaque appel un retraitement de ma collection de Fichier, ou alors faire une reqûete SQL dans cette méthode (mais ça casse le modèle couche métier, couche accès à la BD), je ne vois pas comment faire

    J'aurais aimé avoir une Map du style (Type, Collection de Fichier) qui m'aurait permis d'accéder directement aux fichiers correspondant à un Type donné mais il est dit dans la doc Hibernate qu'il est impossible de mapper une collection de collection.

    Si quelqu'un a une idée de solutions satisfaisantes, je suis preneur car je tourne en rond ! Est-il possible que je mette un truc dans mes fichiers de configuration Hibernate Projet.hbm et qui me permette de spécifier que je veux remplir ma Map (Type, Collection de Fichier) à l'aide d'une requête SQL ?

    Merci d'avance aux personnes expérimentées avec Hibernate, car je trouve cet outil puissant sauf que là je me retrouve à galérer face à ce petit problème à la con !

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    Information sur le HQL ici : http://www.hibernate.org/hib_docs/reference/en/html/queryhql.html

    Autre technique, utiliser les critères de sélection : http://www.hibernate.org/hib_docs/reference/en/html/querycriteria.html

    Ou encore en SQL : http://www.hibernate.org/hib_docs/reference/en/html/querysql.html

  3. #3
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 92
    Points : 70
    Points
    70
    Par défaut
    J'ai un peu plus regardé le HQL et c'est effectivement très puissant. Le problème est que j'ai du mal à savoir où utiliser mes requêtes HQL.

    Si je les utilise dans ma Servlet, à ce moment j'ai l'impression de ne plus vraiment utliser mes POJO puisque je fais directement appel à la base de données depuis ma Servlet.

    Si je mets du HQL dans un POJO, il devient dépendant d'Hibernate, ce qui n'est pas satisfaisant.

    Quelle est la meilleure implémentation ?

    Merci.

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    Utilisation du pattern DAO (Data Access Object)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Servlet --> DAO --> Database (via Hibernate)
       <--- POJO-+

  5. #5
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 92
    Points : 70
    Points
    70
    Par défaut
    Merci Alwin.

    Je ne connais pas les DAO. Je vais lire un peu de doc dessus mais il me semble que c'est la bonne piste.

    Mon problème est en effet d'arriver à implémenter mon modèle en respectant bien les différentes couches (présentation, métier, accès à la base de données), et c'est ce qui fait que je n'arrivais pour le moment à aucune solution satisfaisante.

    Je vais donc creuser un peu les DAO et je viendrai commenter ça !

  6. #6
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 92
    Points : 70
    Points
    70
    Par défaut
    Citation Envoyé par Alwin
    Utilisation du pattern DAO (Data Access Object)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Servlet --> DAO --> Database (via Hibernate)
       <--- POJO-+
    J'ai lu plusieurs documents sur les DAO et si j'ai bien tout compris, il faut que je fasse un truc dans le style dans ma Servlet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ProjetDAO prjdao = new ProjetDAO();
    Projet prj = prjdao.getProjet(id_prj);
    Dans ProjetDAO :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public Projet getProjet(Long id_prj) {
         // Chargement du Projet tel qu'il est défini par mon fichier hbm
         Projet prj = load(id_prj);
         // Je remplis ma Collection de Collection qui me pose problème et
         // qu'Hibernate ne peut générer directement
              // Requête HQL
              // Ajout des éléments dans ma Collection de Collection, attribut de 
              // mon objet Projet
     
         return prj;
    }
    Merci de confirmer l'utilisation que je fais du pattern DAO.

  7. #7
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2
    Par défaut
    Si tu as du temps, regardes SPRING (http://www.springframework.org), il y a une couche d'abstraction au dessus de JDBC ou Hibernate, cela te permettra de voir comment faire une excellente conception

  8. #8
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 92
    Points : 70
    Points
    70
    Par défaut
    Ok, je jetterai un coup d'oeil. En ce moment, je suis en pleine découverte des framework (hibernate, spring, ...), avant j'avais plutôt tendance à tout faire à la main, alors j'y vais petit à petit pour me familiariser avec tout ça. Je vais déjà implémenter mon exemple avec des DAO, j'attaquerai ensuite Spring.
    Je clos le sujet étant donné que j'ai de quoi persister ma collection de collection.

    Merci à vous deux.

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

Discussions similaires

  1. [webflow] binding d'une propriétés de collection
    Par kaljerhom dans le forum Spring Web
    Réponses: 1
    Dernier message: 12/05/2009, 10h08
  2. supprimer une ligne de collection
    Par anaisensitive dans le forum Struts 1
    Réponses: 0
    Dernier message: 01/09/2008, 17h34
  3. Réponses: 2
    Dernier message: 24/09/2007, 10h22
  4. Réponses: 1
    Dernier message: 05/12/2006, 17h22
  5. Trouver la valeur d'une cle de collection
    Par dahan dans le forum Langage
    Réponses: 12
    Dernier message: 29/09/2006, 14h29

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