Bonjour à tous,
Voici l'organisation actuelle de mon modèle métier :
C'est assez simple.
Mais je dois maintenant rajouter des interfaces au dessus de Party et Candidate. Voici donc le nouveau modèle métier :
Et voici le code correspondant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 public interface Choix1<T extends Choix2> { (...) Election getElection(); void setElection(Election election); Set<T> getEnsembleChoix2(); void setEnsembleChoix2(Set<T> ensembleChoix2); (...) }
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
18
19
20
21
22
23 public class Party implements Choix1<Candidate> { (...) private Election election; public Election getElection() { return election; } public void setElection(Election election) { this.election = election; } private Set<Candidate> candidates; public Set<Candidate> getEnsembleChoix2() { return candidates; } public void setEnsembleChoix2(Set<Candidate> candidates) { this.candidates = candidates; } (...) }Jusqu'à présent, j'avais cette requête en base :
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 public class Election { (...) private Set<Choix1<? extends Choix2>> ensembleChoix1; public Set<Choix1<? extends Choix2>> getEnsembleChoix1() { return ensembleChoix1; } public void setEnsembleChoix1(Set<Choix1<? extends Choix2>> choix1) { this.ensembleChoix1 = choix1; } (...) }
Sachant que os est un champ spécifique à Party, qui ne doit pas être connu dans Choix1. Et que electeur et suppleant sont des champs spécifiques à Candidate qui ne doivent pas être connus dans Choix2.
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 Query query = getSession().createQuery( " FROM Election e " + " LEFT JOIN FETCH e.parties party " + " LEFT JOIN FETCH party.os " + " LEFT JOIN FETCH party.candidates candidat " + " LEFT JOIN FETCH candidat.electeur " + " LEFT JOIN FETCH candidat.suppleant " + " WHERE e.type.code =:questionTypeCode " + " AND e.questionnaire.code =:questionnaireCode "); query.setParameter("questionnaireCode", questionnaireCode); query.setParameter("questionTypeCode", questionTypeCode); return (Election) query.uniqueResult();
Ma question est donc la suivante : comment adapter cette requête au nouveau modèle de données ? Sachant que quand elle est appelée, on est sûr que l'implémentation de Choix1 est Party et donc on est sûr que l'implémentation de Choix2 est Candidate.
J'espère vraiment que vous pourrez m'aider car je m'arrache les cheveux avec ce problème![]()
Partager