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 !
Partager