Déroulement des étapes hibernate
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) :
Citation:
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)
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.
Liste des étapes :
1/ Mon main appel le service MdpServiceImpl pour récupérer un mot de passe et l'afficher :
Code:
1 2 3 4
|
MdpServiceImpl impl = new MdpServiceImpl();
Mdp mdp = impl.recupererMdp(new Utilisateur());
System.out.println(mdp.getMdp()); |
2/ Mon MdpServiceImpl ouvre le context Spring, puis fais appel à une MdpDao pour récupérer la donnée :
Code:
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();
} |
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:
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;
} |
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
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 :).