Bonjour,
Je développe une application avec Hibernate et je souhaite vérifier que mon insertion s'est bien déroulé.
Comment faire?
Actuellement je fait ceci:
Merci de votre aideCode:sessionFactory.getCurrentSession().save(utilisateur);
Version imprimable
Bonjour,
Je développe une application avec Hibernate et je souhaite vérifier que mon insertion s'est bien déroulé.
Comment faire?
Actuellement je fait ceci:
Merci de votre aideCode:sessionFactory.getCurrentSession().save(utilisateur);
Bonjour,
:fleche: http://docs.jboss.org/hibernate/orm/...a.lang.Object)
A+.
Il faudrait que j'utilise le type transaction? J'ai mi un bean transaction dans mon application.xml comme j'ai fait pour la session
Tu vérifies ce que retourne la méthode save.
Je n'est pas vu dans la doc comment faire pour vérifier ce que retourne la méthode save. Et je voudrais faire pareil pour update et delete.
Les méthodes delete et update ne retournent rien, tu dois seulement voir s'il y a ou non un HibernateException.
A+.
J'essaye d'appliquer ceci sauf que moi j'utilise sessionFactory et non session
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Session sess = factory.openSession(); Transaction tx; try { tx = sess.beginTransaction(); //do some work ... tx.commit(); } catch (Exception e) { if (tx!=null) tx.rollback(); throw e; } finally { sess.close(); }
Justement j'ai du mal à voir la différence entre session et sessionFactory
J'utilise hibernate avec spring et j'ai déclaré mon sessionFactory en bean dans le application.xml et ensuite je l'appelle dans mon DAO
sessionFactory.getCurrentSession().save(utilisateur);
Ce que je souhaiterais c'est attrapé toutes les exceptions liés à l'accès à la base de données et les opérations effectuésur qui se sont mal passé
L'interface sessionFactory (usine de session), c'est lui qui se charge de créer les objets session. SessionFactory est l'usine et session le produit.
sessionFactory.getCurrentSession() retourne la session en cours.
sessionFactory.openSession() crée une nouvelle session ouverte.
Pour les erreurs, j'ai déjà dit plus haut l'Exception à gérer.
A+.
Alors pourquoi sa fonctionne sessionFactory comme je l'utilise actuellement. Car je fais pas un opensession
Parce que t'es pas obligé d'ouvrir toi même une nouvelle session mais spring le fait à ta place si ta configuration est bonne ici:
Voilà la cause, pourquoi tu peux utiliser getCurrentSession(), et tu n'auras même pas de faire le commit dans ton code.
Pour revenir à ton problème principal, la méthode save() retourne un Integer, Long ou autre chose selon l'attribut identifiant de ta classe utilisateur.
Pour delete et update, ces méthodes ne retournent rien. Par contre, en cas d'erreur, ils lancent l'exception HibernateException, donc là tu peux voir que la modification ne s'est pas effectué.
A+.
Voici une de mes méthode de mon DAO pour récupérer des informations dans la bd:
J'appel cette méthode dans ma classe serviceCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 @SuppressWarnings("unchecked") public List<UtilisateurEntitie> listerUtilisateur() throws ListerUtilisateurException, Exception{ List<UtilisateurEntitie> listeUtilisateurs = null; try{ listeUtilisateurs = (List<UtilisateurEntitie>)sessionFactory.getCurrentSession().createQuery("from UtilisateurEntitie").list(); } catch(HibernateException e){ System.out.println("Exception lever"); throw new ListerUtilisateurException("Aucun utilisateurs trouvé !"); } catch(Exception e){ System.out.println("Autre Exceiton lever"); throw new ListerUtilisateurException("Erreur d'accès à la base de données !"); } finally{ sessionFactory.close(); } return listeUtilisateurs; }
Cette méthode me provoque l'exception suivante:
Code:
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 GRAVE: Servlet.service() for servlet [webservice] in context with path [/exempleWebService] threw exception [Request processing failed; nested exception is org.springframework.orm.hibernate4.HibernateSystemException: Unknown service requested [org.hibernate.stat.spi.StatisticsImplementor]; nested exception is org.hibernate.service.UnknownServiceException: Unknown service requested [org.hibernate.stat.spi.StatisticsImplementor]] with root cause org.hibernate.service.UnknownServiceException: Unknown service requested [org.hibernate.stat.spi.StatisticsImplementor] at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:173) at org.hibernate.internal.SessionFactoryImpl.getStatisticsImplementor(SessionFactoryImpl.java:1449) at org.hibernate.internal.SessionFactoryImpl.getStatistics(SessionFactoryImpl.java:1445) at org.hibernate.engine.transaction.internal.TransactionCoordinatorImpl.afterTransaction(TransactionCoordinatorImpl.java:139) at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.afterTransactionCompletion(JdbcTransaction.java:138) at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:186) at org.springframework.orm.hibernate4.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:584) at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:761) at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:730) at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:485) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:291) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) at com.sun.proxy.$Proxy24.listerUtilisateur(Unknown Source) at com.webservice.service.impl.UtilisateurServiceImplWebService.listerUtilisateur(UtilisateurServiceImplWebService.java:32) at com.webservice.controller.UtilisateurRestController.listerUtilisateur(UtilisateurRestController.java:42) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:111) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:806) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:729) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) at javax.servlet.http.HttpServlet.service(HttpServlet.java:622) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1100) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:687) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745)
Finalement sa fonctionne. Il ne faut pas mettre le bout de code suivant:
Code:
1
2
3 finally{ sessionFactory.close(); }
Apparemment tu ne comprends toujours pas la différence entre SessionFactory et Session. Je te conseille de lire un tutoriel sur hibernate au lieu de coder à l'aveugle.
A+.
SessionFactory permet d'obtenir la connexion jdbc et sessionFactory de faire des opérations sur la table?
Et dans mon cas le getCurrentSession permet de remplacer la création d'une instance de type session ?
Du coup peu tu me dire si mon code est propre et je veut faire un save je pourrais utiliser la même méthode ?
Cette méthode permet elle de gérer plusieurs connexion à la base de données en même temps par plusieurs utilisateurs