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 :
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
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
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
J'ai vu sur le forum stackoverflow quelqu'un qui disait:
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!
Mais mon fichier web.xml contient déjà le filtre OpenEntityManagerInViewFilter :
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>
J'en déduis qu'il y a un truc à faire ailleurs, mais je sais pas où...
Si quelqu'un a une piste, ça serait chouette