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 :
	
	org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: [
].listVersionEtablissement, could not initialize proxy - no Session
 Voici le mapping :
	
	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; | 
 
	
	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>(); | 
 
	
	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 :
	
	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.
						
					
Partager