IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

Vérifier qu'une opération a bien eu lieu


Sujet :

Hibernate Java

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut Vérifier qu'une opération a bien eu lieu
    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:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sessionFactory.getCurrentSession().save(utilisateur);
    Merci de votre aide

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059

  3. #3
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    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

  4. #4
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Tu vérifies ce que retourne la méthode save.

  5. #5
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    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.

  6. #6
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Les méthodes delete et update ne retournent rien, tu dois seulement voir s'il y a ou non un HibernateException.

    A+.

  7. #7
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    J'essaye d'appliquer ceci sauf que moi j'utilise sessionFactory et non session
    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 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();
     }

  8. #8
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Citation Envoyé par totot Voir le message
    J'essaye d'appliquer ceci sauf que moi j'utilise sessionFactory et non session
    Alors sess que tu utilises ici c'est quoi à ton avis?
    Citation Envoyé par totot Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Session sess = factory.openSession();

  9. #9
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    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é

  10. #10
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    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+.

  11. #11
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Alors pourquoi sa fonctionne sessionFactory comme je l'utilise actuellement. Car je fais pas un opensession

  12. #12
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Citation Envoyé par totot Voir le message
    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:
    Citation Envoyé par totot Voir le message
    J'ai mi un bean transaction dans mon application.xml
    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+.

  13. #13
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Voici une de mes méthode de mon DAO pour récupérer des informations dans la bd:
    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
    	@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;
    	}
    J'appel cette méthode dans ma classe service
    Cette méthode me provoque l'exception suivante:
    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
    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)

  14. #14
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Finalement sa fonctionne. Il ne faut pas mettre le bout de code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    finally{
    			sessionFactory.close();
    		}

  15. #15
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    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+.

  16. #16
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] vérifier si une TextBox contient bien des caractères numériques
    Par YassDumb dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/07/2012, 16h41
  2. Comment vérifier si une application est bien démarrée
    Par emile.coue dans le forum Weblogic
    Réponses: 1
    Dernier message: 28/05/2010, 17h39
  3. vérifier si une requete renvoie bien une valeur
    Par ssisssou dans le forum Langage
    Réponses: 1
    Dernier message: 17/03/2010, 12h32
  4. Vérifier qu'une hiérarchie est bien organisée
    Par tendre_amie007 dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 04/08/2009, 16h43
  5. Vérifier qu'une partition est bien montée
    Par Olivier Regnier dans le forum Linux
    Réponses: 6
    Dernier message: 30/03/2008, 00h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo