Bonjour,
J'utilise hibernate dans un projet perso pour m'entraîner. Je bute sur un problème de mapping. Je vais essayer de le reproduire avec un exemple simple :
J'ai 3 entités.
- Emailing
id_emailing
date_envoi
- GroupeClient
id_group
nom_groupe
- RegleMarketing
id_regle
id_emailing
id_group
nom_regle
priorite
J'élimine les parties moins intéressantes du modèle en gros, ça fonctionne comme ceci :
1) L'utilisateur crée des campagnes d'emailing. (la table Emailing)
2) Il peut ensuite définir pour chaque groupe de client existant quels sont les règles qui vont s'appliquer pour l'envoi des mails, les groupes sont globaux au compte de l'utilisateur. Ainsi plusieurs campagnes peuvent utiliser le même groupe.
3) Les règles sont évaluées dans l'ordre de leur priorité, la priorité vaut au sein du couple (groupe, emailing), chaque couple ayant des règles différentes.
Au niveau interface utilisateur, ça se passe comme ça :
1) Le type crée une campagne
2) On l'amène sur un écran de choix du groupe
3) Il rentre les règles pour le groupe choisi.
Assez simple hein? Je vois assez bien comment mapper ma classe RegleMarketing en lui donnant 2 champs :
Par contre, je patauge dans le sens inverse...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 private RegleMarketing { Emailing campagneEmailing; //mappé vers la campagne parent GroupeClient groupe; //mappé vers le groupe parent int priorite; }
Je peux pas depuis Emailing avoir une simple List<RegleMarketing> car ça me retournerait les règles pour tout groupe confondu.
Je pourrais certes utiliser un contructeur du style
pour la création de règle, mais cela m'ennuie car je ne saurai pas comment gérer et numéroter correctement les priorités de mes règles... Il aurait fallu que j'ai une façon de grouper mes règles dans un conteneur de ce genre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 public RegleMarketing( Emailing, campagne GroupeClient publicCible)
Mais cela nécessiterait à ma connaissance une table intermédiaire dans la base de données, et je ne peux pas modifier le schéma.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 public class GroupeRegle { public GroupeRegle() List<RegleMarketing> regles; public void ajouteRegle( RegleMarketing regle ) {...} public void changePriorite( RegleMarketing regle ) {...} }
En dernier recours, je pourrais ne pas mapper du tout les relations
Groupe -> Regle
Emailing -> Regle
Et utiliser un service du style
Mais ce serait moins cool.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 public class RegleManager { public List<RegleMarketing> trouveRegles( Emailing campagne, GroupeClient pub) { } public void ajouteRegle( Emailing campagne, GroupeClient pub, RegleMarketing regle ) { //inserer et calculer la priorité ici } }
Des suggestions pour réaliser ce mapping?
Partager