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

Persistance des données Java Discussion :

JAVA JDB + JPA Problème d'exception


Sujet :

Persistance des données Java

  1. #1
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2015
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Février 2015
    Messages : 402
    Points : 153
    Points
    153
    Par défaut JAVA JDB + JPA Problème d'exception
    Bonjour,

    Je souhaite supprimer un enregistrement de l'un des fichiers de ma base par un entityManager/remove, et j'obtiens systématiquement le message d'erreur suivant :

    javax.persistence.NoResultException: getSingleResult() did not retrieve any entities.

    Je n'arrive pas à coder correctement mon bloc try/catch (mais la suppression s'effectue bien).

    MERCI pour votre aide.

    Voici mon code :

    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
     
    @Stateless
    public class ParametreFacade extends AbstractFacade<Parametre> {
     
        @PersistenceContext(unitName = "WebJODPU")
        private EntityManager entityManager;
     
        @Override
        protected EntityManager getEntityManager() {
            return entityManager;
        }
     
        public ParametreFacade() {
            super(Parametre.class);
        }
     
        public void supprimerTableauBordPanel(TableauBordGroupe groupe) {  
     
            Parametre parametre = new Parametre();
     
            Query jQuery = getEntityManager().createQuery("select p from Parametre p where p.valeur1 = :valeur1");
     
            jQuery.setParameter("valeur1", groupe.getGroupeIdPanel().substring(6));
     
            try {
                parametre = (Parametre) jQuery.getSingleResult();
     
                getEntityManager().remove(parametre);
     
            } catch (Exception e) {
     
                e.printStackTrace();
            }

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 265
    Points : 181
    Points
    181
    Par défaut re
    Pourquoi ne pas tester un peu ton retour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    parametre = (Parametre) jQuery.getSingleResult();
    if (parametre!=null) { remove....;}
    Pour ton catch, il vaut mieux traiter les exceptions.
    Pas de Catch vide (Exception E) {}


    Tu peux Faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    catch (Exception ex) {
    System.out.println("Erreur Lors de la suppression" + ex.getMessage();
    }
    Voilà pour commencer.

    Bon courage.

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par batou22003 Voir le message
    Pourquoi ne pas tester un peu ton retour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    parametre = (Parametre) jQuery.getSingleResult();
    if (parametre!=null) { remove....;}
    Parce que ce serait abherrant. getSingleResult() garanti de ne jamais retourner null
    Citation Envoyé par denisduval75 Voir le message
    Bonjour,

    Je souhaite supprimer un enregistrement de l'un des fichiers de ma base par un entityManager/remove, et j'obtiens systématiquement le message d'erreur suivant :

    javax.persistence.NoResultException: getSingleResult() did not retrieve any entities.

    Je n'arrive pas à coder correctement mon bloc try/catch (mais la suppression s'effectue bien).
    Si la suppression a bien eu lieu mais que tu as quand même cette erreur:

    soit l'enregistrement n'a jamais été créé dans la base => rien à récupérer et donc rien à supprimer
    soit tu as tenté deux fois de supprimer l'élément et la deuxième fois, tu as l'erreur.
    Faudrait un peu plus de contexte pour comprende.

    Au passage, ne catche que les exceptions que tu peux traiter. Donc évite les catchs génériques genre catch(Exception e). Je suis sûr que tu ne veux pas empêcher tout ce qui est sécurité de remonter, par exemple, ou tout ce qui concerne les interruptions.

  4. #4
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2015
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Février 2015
    Messages : 402
    Points : 153
    Points
    153
    Par défaut
    Bonjour batou22003 et merci pour ta réponse.

    J'ai modifié mon code comme ceci,

    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
            Parametre parametre = new Parametre();
     
            Query jQuery = getEntityManager().createQuery("select p from Parametre p where p.type = 'TableauBord' and p.nom = 'Panel' and p.valeur1 = :valeur1");
     
            jQuery.setParameter("valeur1", groupe.getGroupeIdPanel().substring(6));
     
            try {
                parametre = (Parametre) jQuery.getSingleResult();
     
                if (parametre != null) {
                    getEntityManager().remove(parametre);
                }
            } catch (Exception e) {
                System.out.println("Erreur Lors de la suppression" + e.getMessage());
            }

    et cette fois j'ai l'erreur 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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    javax.persistence.NoResultException: getSingleResult() did not retrieve any entities.
    	at org.eclipse.persistence.internal.jpa.QueryImpl.throwNoResultException(QueryImpl.java:976)
    	at org.eclipse.persistence.internal.jpa.QueryImpl.getSingleResult(QueryImpl.java:526)
    	at org.eclipse.persistence.internal.jpa.EJBQueryImpl.getSingleResult(EJBQueryImpl.java:400)
    	at facade.ParametreFacade.lectureParametre(ParametreFacade.java:50)
    	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:498)
    	at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1081)
    	at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1153)
    	at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:4786)
    	at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:656)
    	at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822)
    	at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:608)
    	at org.jboss.weld.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:64)
    	at org.jboss.weld.ejb.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:52)
    	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:498)
    	at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:883)
    	at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822)
    	at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:608)
    	at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doCall(SystemInterceptorProxy.java:163)
    	at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:140)
    	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:498)
    	at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:883)
    	at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:822)
    	at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:369)
    	at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:4758)
    	at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:4746)
    	at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:212)
    	at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88)
    	at com.sun.proxy.$Proxy225.lectureParametre(Unknown Source)
    	at facade.__EJB31_Generated__ParametreFacade__Intf____Bean__.lectureParametre(Unknown Source)
    	at logic.TableauBordManagerBean.initialiserTableauBordGroupe(TableauBordManagerBean.java:251)
    	at logic.TableauBordManagerBean.tableauBordGroupeFermer(TableauBordManagerBean.java:212)
    	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:498)
    	at javax.el.ELUtil.invokeMethod(ELUtil.java:332)
    	at javax.el.BeanELResolver.invoke(BeanELResolver.java:537)
    	at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:256)
    	at com.sun.el.parser.AstValue.invoke(AstValue.java:283)
    	at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304)
    	at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40)
    	at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
    	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
    	at com.sun.faces.facelets.tag.jsf.core.AjaxBehaviorListenerImpl.processAjaxBehavior(AjaxHandler.java:459)
    	at org.primefaces.event.AbstractAjaxBehaviorEvent.processListener(AbstractAjaxBehaviorEvent.java:38)
    	at javax.faces.component.behavior.BehaviorBase.broadcast(BehaviorBase.java:106)
    	at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:805)
    	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:755)
    	at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:931)
    	at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78)
    	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
    	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
    	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
    	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
    	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
    	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
    	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:416)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:283)
    	at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
    	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
    	at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206)
    	at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180)
    	at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
    	at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
    	at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283)
    	at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
    	at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132)
    	at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111)
    	at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
    	at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:536)
    	at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
    	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
    	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
    	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
    	at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591)
    	at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571)
    	at java.lang.Thread.run(Thread.java:745)

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 265
    Points : 181
    Points
    181
    Par défaut re-
    Suite aux remarques précédentes, tu devrais peut-etre
    faire un catch plus fin , plutot que Exception.
    Les exception sont traitées dans l'ordre du plus fin (plus spécifique) à la plus générique.
    Ne met pas de message si tu ne peux pas traiter.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    catch (NoResultException ex) { }

  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
    Bonjour,

    Pourquoi le chercher dans la base si ce n'est que pour le supprimer?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Query jQuery = getEntityManager().createQuery("DELETE FROM Parametre p where p.type = 'TableauBord' and p.nom = 'Panel' and p.valeur1 = :valeur1");
    jQuery.setParameter("valeur1", groupe.getGroupeIdPanel().substring(6));
    int nbLignesSupprime = jQuery.executeUpdate();
    A+.

  7. #7
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2015
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Février 2015
    Messages : 402
    Points : 153
    Points
    153
    Par défaut
    OK Ca marche à présent

    Merci à vous pour votre aide

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

Discussions similaires

  1. JAVA/JDB/JPA Suppression impossible
    Par denisduval75 dans le forum JPA
    Réponses: 2
    Dernier message: 21/02/2017, 07h26
  2. Réponses: 1
    Dernier message: 17/01/2017, 16h01
  3. Réponses: 1
    Dernier message: 14/01/2017, 12h05
  4. Réponses: 15
    Dernier message: 20/01/2011, 15h47
  5. Réponses: 4
    Dernier message: 18/10/2009, 18h36

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