Bonjour à tous,
Je développe une application avec les technos suivantes : Wicket 1.4.17 - Spring 3.0.4 - JPA 2.0 - Hibernate 3.5.6.
J'ai pas eu de problème particulier avec mes couches métiers et dao jusqu'à vouloir utiliser le lazy loading.
Je m'explique : j'ai une entité membre qui contient entre autres un attribut infosPerso (qui est lui même une entité).
Extrait de ma classe Membre :
Le problème arrive quand je tente d'accéder à l'attribut infosPerso de la classe membre : j'ai une belle exception de LazyLoading :
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 @Entity public class Membre extends DomainObject { private static final long serialVersionUID = -80426809311125204L; @Id private String membreId; @Temporal(TemporalType.DATE) private Date dateNaissance; private Character sexe; private String password; private String codeIdentification; @OneToOne(cascade=CascadeType.ALL, fetch=FetchType.LAZY) @JoinColumn(unique=true, nullable=true) private InfosPerso infosPerso; //Getters and setters
J'ai vu sur le forum stackoverflow quelqu'un qui disait:
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 [...] Caused by: org.hibernate.LazyInitializationException: could not initialize proxy - no Session at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:167) at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:215) at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:191) at fr.statlife.protoE4N.data.entites.InfosPerso_$$_javassist_0.toString(InfosPerso_$$_javassist_0.java) at java.lang.String.valueOf(String.java:2826) at java.lang.StringBuilder.append(StringBuilder.java:115) at org.apache.wicket.util.lang.PropertyResolver$MethodGetAndSet.getValue(PropertyResolver.java:1121) at org.apache.wicket.util.lang.PropertyResolver$ObjectAndGetSetter.getValue(PropertyResolver.java:642) at org.apache.wicket.util.lang.PropertyResolver.getValue(PropertyResolver.java:101) at org.apache.wicket.model.AbstractPropertyModel.getObject(AbstractPropertyModel.java:130) at org.apache.wicket.Component.getDefaultModelObject(Component.java:1724) at org.apache.wicket.Component.getDefaultModelObjectAsString(Component.java:1743) at org.apache.wicket.markup.html.form.FormComponent.getModelValue(FormComponent.java:1377) at org.apache.wicket.markup.html.form.FormComponent.getValue(FormComponent.java:879) at org.apache.wicket.markup.html.form.TextField.onComponentTag(TextField.java:106) at org.apache.wicket.Component.renderComponent(Component.java:2661) at org.apache.wicket.MarkupContainer.onRender(MarkupContainer.java:1539) at org.apache.wicket.Component.render(Component.java:2521) at org.apache.wicket.MarkupContainer.renderNext(MarkupContainer.java:1441) at org.apache.wicket.MarkupContainer.renderComponentTagBody(MarkupContainer.java:1604) at org.apache.wicket.MarkupContainer.onComponentTagBody(MarkupContainer.java:1528) at org.apache.wicket.markup.html.form.Form.onComponentTagBody(Form.java:2012) at org.apache.wicket.Component.renderComponent(Component.java:2690) ... 65 more
Mais mon fichier web.xml contient déjà le filtre OpenEntityManagerInViewFilter :The cleanest solution I found was to use Spring's OpenEntityManagerInViewFilter (there's an OpenSessionInViewFilter for Hibernate) -- a simple servlet filter you drop in to web.xml (ahead of your other servlet filters), and Spring will automatically create a thread-safe, transaction-aware Session per-HTTP-request. No more LazyInitializationException!
J'en déduis qu'il y a un truc à faire ailleurs, mais je sais pas où...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <!-- Open session in view --> <filter> <filter-name>osiv</filter-name> <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class> </filter>
Si quelqu'un a une piste, ça serait chouette![]()
Partager