Bonjour, je commence à utiliser les EJB et les Entity... J'ai suivi un tutoriel de ce site pour mettre en place une application Java EE 6 avec Hibernate + GlassFish, mais je n'arrive pas à récupérer les collections qui sont liée à mon entitées. J'ai toujours une problème de LazyInitializationException.
Dès que je rajoute un @XmlTransient au-dessus de mon getter, le problème disparait, mais ma collection n'est par récupérée. Ma question est de savoir comment faire pour la récupérer ?
ci-dessous un exemple de mon entité complète et l'erreur apparait lorsque je veux récupérer la List<Sportsaison> sportSaison
J'ai lu un peu partout que c'était un problème de session... Mais perso je n'en gère pas.. ou c'est tout gérer automatiquement par JTA (si c'est bien son job....). Si c'est un problème de session, pouvez-vous me dire comment les faire ? et pourquoi les @ManyToOne marche si c'est un vraiment ce problème.
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111 /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package ch.plugin.sportreserv.entity; import java.io.Serializable; import java.util.List; import javax.persistence.Basic; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlTransient; /** * * @author Chatis */ @Entity @Table(name = "sport") @XmlRootElement public class Sport implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.AUTO) @Basic(optional = false) @Column(name = "IDSport") private Integer iDSport; @Column(name = "NomSport",length=20) private String nomSport; @Column(name = "ImgSport",length=50) private String imgSport; @OneToMany(cascade={CascadeType.PERSIST}) @JoinColumn(name="IDSport", referencedColumnName="IDSport") private List<Sportsaison> sportSaisons; public Sport() { } public Sport(Integer iDSport) { this.iDSport = iDSport; } public Integer getIDSport() { return iDSport; } public void setIDSport(Integer iDSport) { this.iDSport = iDSport; } public String getNomSport() { return nomSport; } public void setNomSport(String nomSport) { this.nomSport = nomSport; } public String getImgSport() { return imgSport; } public void setImgSport(String imgSport) { this.imgSport = imgSport; } @XmlTransient public List<Sportsaison> getSportSaisons() { return sportSaisons; } public void setSportSaisons(List<Sportsaison> sportSaisons) { this.sportSaisons = sportSaisons; } @Override public int hashCode() { int hash = 0; hash += (iDSport != null ? iDSport.hashCode() : 0); return hash; } @Override public boolean equals(Object object) { // TODO: Warning - this method won't work in the case the id fields are not set if (!(object instanceof Sport)) { return false; } Sport other = (Sport) object; if ((this.iDSport == null && other.iDSport != null) || (this.iDSport != null && !this.iDSport.equals(other.iDSport))) { return false; } return true; } @Override public String toString() { return "ch.plugin.sportreserv.entity.Sport[ iDSport=" + iDSport + " ]"; } }
Vraiment besoin de vous..
Merci








Répondre avec citation



. EAGER et LAZY sont 2 politiques d'extraction de données malheureusement mal utilisées dans beaucoup de projets, et certains en profitent pour critiquer JPA, pourtant c'est simplement une mauvaise utilisation du framework. En fait c'est très bien de vouloir être en LAZY, c'est d'ailleurs ce que je propose dans mes projets, mais voila comment je conçois les choses, si pour une entité A associée à une liste d'entité B, si à 70 % des fois où j'ai besoin de A j'ai aussi besoin de la liste associée à A, alors je suis en EAGER, mais sinon je laisse en LAZY, et je passe par une hql. En d'autres termes étant en LAZY, si je veux A avec sa liste d'elements associée, alors voila mon exemple de requete hql :
Partager