Bonjour à tous !
En lisant le livre d'Anthony PATRICIO : Java Persistence et Hibernate, je suis tombé sur une gestion d'une association ManyToMany qui correspond à mon besoin, c'est à dire :
- avec des champs supplémentaires dans la table d'association.
- l'association entre la table mère et la table d'association est une composition.
La voici l'exemple du livre :
L'exemple du livre (extrait du code source ci-dessus ou téléchargeable ici http://www.editions-eyrolles.com/Liv...e-et-hibernate) est un projet Eclipse avec Embedded JBoss.
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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85 [Coach]<> ----> *[Season]* ----> [Team] // Coach.java @Entity public class Coach { @Id @GeneratedValue private int id; @ManyToMany @MapKey private Map<Season,Team> teams = new HashMap<Season,Team>(); private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Map<Season, Team> getTeams() { return teams; } public void setTeams(Map<Season, Team> teams) { this.teams = teams; } } // Season.java @Embeddable public class Season { private Date startDate; private Date endDate; public Date getStartDate() { return startDate; } public void setStartDate(Date startDate) { this.startDate = startDate; } public Date getEndDate() { return endDate; } public void setEndDate(Date endDate) { this.endDate = endDate; } } // Team.java @Entity public class Team { @Id @GeneratedValue private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
Cette exemple fonctionne parfaitement dans cet environnement.
Mais dans les environnements suivants :
- JBoss AS 5.0.1 et EJB3 (en mode TransactionManagementType.BEAN ou TransactionManagementType.CONTAINER)
- Spring pour la l'injection de dépendance et la gestion des transactions
Au moment ou j'appel la fonction getKey() (dans la transaction) de la propriété "private Map<Season,Team> teams" :
j'ai l'erreur suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 [...] for (Entry<Season, Team> entry : coach.getTeams().entrySet()) { System.out.println(entry.getValue().getName()); System.out.println(entry.getKey().getStartDate()); System.out.println(entry.getKey().getEndDate()); } [...]
Si quelqu'un comprend le problème...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 java.lang.ClassCastException: java.lang.Long cannot be cast to com.et.Season
Merci.
Nassa.
Partager