Bonjour,
J’ai un souci de lazyloading avec mes sous-collections. J’ai trouvé pas mal de posts sur le sujet, mais je n’arrive toujours pas à régler mon problème (je comprends vite, mais il faut m’expliquer long temps ! )
Donc voici mon problème :
J’ai 1 fiche contrôle lié à 1 établissement lui-même lié à N version/historique d’établissement.
La requête que je souhaite faire dois me remonter la fiche contrôle avec son établissement avec la dernière version de l’établissement. Or lorsque j’accède à la version j’obtiens une erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: [].listVersionEtablissement, could not initialize proxy - no Session
Voici le mapping :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
@Entity
@Table(name="controle")
public class Controle extends AbstractData<Integer> {
	[]
 
	@OneToOne
	@JoinColumn(name="code_siret")
	private Etablissement etablissement;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
@Entity
@Table(name = "etablissement")
public class Etablissement extends AbstractData<String> {
 
    []
 
    @OneToMany(mappedBy="erp")
    private List<EtablissementVersion> listVersionEtablissement = new ArrayList<EtablissementVersion>();
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
@Entity
@Table(name = "etablissement_version")
public class EtablissementVersion extends AbstractData<Integer> {
 
[]
    @OneToOne
    @JoinColumn(name = "code_siret")
    private Etablissement erp=new Etablissement();
 
    @Column(name = "numero_version")
    private Integer numeroVersion;
Et voice la requête :
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
Session session = getSessionFactory().getCurrentSession();
 
		DetachedCriteria maxVersionQuery = DetachedCriteria.forClass(EtablissementVersion.class);
		ProjectionList proj = Projections.projectionList();
		proj.add(Projections.max("numeroVersion"));
		proj.add(Projections.groupProperty("erp"));
		maxVersionQuery.setProjection(proj);
 
 
		Criteria criteria = session.createCriteria(Controle.class);
 
criteria.createCriteria("etablissement", "etabl", JoinType.INNER_JOIN)
						.setFetchMode("etabl", FetchMode.JOIN);
		criteria.createCriteria("etabl.listVersionEtablissement").setFetchMode("etabl.listVersionEtablissement", FetchMode.JOIN).add(Subqueries.propertiesEq(new String[] {"numeroVersion", "erp"}, maxVersionQuery));
List<Controle> resutat = (List<Controle>) criteria.list();
Si une âme charitable, pouvait m'indiquer où est mon erreur.

Merci d'avance.