Bonjour à tous ,
j'essaie de récupérer une donnée grâce à son id dans une BDD MySql mais une l'Exception suivante survient (de temps en temps, ça passe parfois en debug sans que je ne change rien) :
Comme je l'ai dit au dessus, parfois ça passe quand je fais du "pas-à-pas" en mode debug. Je soupçonne donc une erreur de synchronisation dans mes étapes d'ouverture/fermeture de Session/Factory Hibernate. J'espère que vous pourrez m'aider.Exception in thread "main" org.hibernate.LazyInitializationException: could not initialize proxy - no Session
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:147)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:260)
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:68)
at com.ecollection.model.Mdp_$$_jvst588_0.getMdp(Mdp_$$_jvst588_0.java)
at TestMain.main(TestMain.java:114)
Liste des étapes :
1/ Mon main appel le service MdpServiceImpl pour récupérer un mot de passe et l'afficher :
2/ Mon MdpServiceImpl ouvre le context Spring, puis fais appel à une MdpDao pour récupérer la donnée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 MdpServiceImpl impl = new MdpServiceImpl(); Mdp mdp = impl.recupererMdp(new Utilisateur()); System.out.println(mdp.getMdp());
3/ La MdpDao ouvre la Session, récupère l'objet Mdp, referme la session et renvoi le Mdp au Service qui l'a appelé :
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 ClassPathXmlApplicationContext context; MdpDao mdpDao; public Mdp recupererMdp(Utilisateur utilisateur) { demarrerContext(); Mdp res = mdpDao.recupererMdp(utilisateur); fermerContext(); return res; } public void demarrerContext() { context = new ClassPathXmlApplicationContext("spring.xml"); mdpDao = context.getBean(MdpDao.class); } public void fermerContext() { context.close(); }
4/ Le Service (voir code en 2/) récupère le Mdp depuis la Dao puis ferme le context et renvoie le Mdp à mon main
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 private SessionFactory sessionFactory; public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } public Mdp recupererMdp(Utilisateur utilisateur) { Session session = sessionFactory.openSession(); Mdp res = session.load(Mdp.class, new Long("1")); session.close(); return res; }
5/ Mon main affiche Mdp.
Voilà, je pense faire une erreur dans les ouvertures/fermetures de Sessions/Factory mais je ne saisi pas pourquoi.
Merci d'avance à ceux qui prendront le temps de me lire et me répondre .
Partager