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

JPA Java Discussion :

JPQL et requetes dynamiques


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 231
    Par défaut JPQL et requetes dynamiques
    Bonjour,

    Je construis une frame de recherche d'objets à partir d'attributs.

    Genre: tous les établissements ayant le codePostal=59000
    ou: tous les établissements ayant le nom comme %tot% et dont la ville est Lille.

    Je me tourne vers les setParameters, les '?'. Mais comment faire pour que mes critere de recherche soit dynamique. (Apres le where) .Je peux en avoir qu'un comme plusieurs.

    Merci de votre aide.

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    je me suis posé la même question et je n'utilise plus "dans certain cas" les setParameter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        public List Marequete(String MaTAble, String MonChamp, String MaValeur){
     
        	String requete = "select id from `"+MaTAble+"` where `"+MonChamp+"`="+MaValeur;
        	Query oQuery = entityManager.createQuery(requete);
        	return oQuery.getResultList();
        }
    c'est ce que tu voulais ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 231
    Par défaut
    Oui c'est à peu pres ca. Sauf que j'utilises un business pattern. J'aimerai donc que dans ma couche graphique il n 'y a aucune notion de sql ou autres.
    En plus, le nombre de criteres apres le where n 'est pas forcément fixe.

    J'ai regardé du cote de hibernate criteria. Apparrement cela répond entièrement à ce que je veux.
    Mais par contre faut appeler session dans la ligne suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Criteria criteria = session.createCriteria(Preleveur.class);
    Mais le problème est que je n'arrive pas à déterminer session. Je fais appel donc à un locator et un business delegate.

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Tu peux très bien le faire via l'entityManager, comme avec les EJB3.
    Voici un exemple
    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
     
    public List<Intervenant> findAll(String identite, String prenom, String nom)
    {
        StringBuilder sb = new StringBuilder(80);
        sb.append("select model from Intervenant model where 1=1");
     
        SQLParametersUtils.addCriteria(sb, " and ", "ecident", identite);
        SQLParametersUtils.addCriteria(sb, " and ", "ecprenom", prenom);
        SQLParametersUtils.addCriteria(sb, " and ", "ecnom", nom);
     
        Query query = entityManager.createQuery(sb.toString());
     
        SQLParametersUtils.addParameter(sb, query, "ecident", identite);
        SQLParametersUtils.addParameter(sb, query, "ecprenom", prenom);
        SQLParametersUtils.addParameter(sb, query, "ecnom", nom);
     
        List<Intervenant> list = query.getResultList();
        return list;
    }
     
    Et la classe utilitaires
     
    public class SQLParametersUtils
    {
        public static String convertGenericCharacters(String value)
        {
            if ( value == null ) return null;
            String result = value.replace('*', '%');
            return result;
        }
     
        public static boolean isParameterValid(Object parameter)
        {
            if ( parameter == null ) return false;
            if ( parameter instanceof String && ((String)parameter).trim().length() == 0 ) return false;
            return true;
        }
     
        public static void addCriteria(StringBuilder sb, String testType, String parameterName, Object parameter)
        {
            if ( ! isParameterValid(parameter) ) return;
     
            sb.append(testType).append(parameterName);
            if ( parameter instanceof String )
            {
                String value = convertGenericCharacters( (String)parameter );
                if ( value.indexOf("%") != -1 ) sb.append(" like :").append(parameterName);
                else sb.append(" = :").append(parameterName);
            }
            else sb.append(" = :").append(parameterName);
        }
     
        public static void addParameter(StringBuilder sb, Query query, String name, Object parameter)
        {
            if ( sb.indexOf(name) == -1 ) return;
     
            if ( parameter instanceof String )
            {
                String value = convertGenericCharacters( (String)parameter );
                query.setParameter(name, value);
                return;
            }
     
            query.setParameter(name, parameter);
        }
    }
    Voilà, j'espère que ça t'aidera
    Je te laisse rajouter les méthodes complémentaires...

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 231
    Par défaut
    Je vais regarder ca et je vous tiens au courant.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 231
    Par défaut
    Merci c'est niquel je personnalise ca avec mon boulot.
    Merci beaucoup à tous les deux.

  7. #7
    Membre éclairé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Par défaut
    Pourquoi tu ne construirait pas tout simplement ta requête de manière dynamique.

    [Code à la volée... en admettant que tu es l'attribut conn de type Connection]
    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
    public X maRequete(String maTable, List<String> mesParams, List<String> mesValeurs)
    {
        String maRequete = new String("Select etablissement FROM "+maTable);
        StringBuffer whereClause = new StringBuffer(" WHERE ");
        for(String param : mesParams)
        {
            whereClause.append(param+"= ?,");
        }
    // On enlève le dernier caractère de la clause where car c'est une virgule qui n'a rien à faire en dernière posistion.
        PreparedStatement pst = conn.prepareStatement(maRequete+whereClause.toString().subString(0,whereClause.toString().length()-1));
     
        int cnt = 0;
        for(String valeur : mesValeurs)
        {
            // Faire ici un instanceof sur valeur si valeur est de type Object au lieu de String afin de définir quel setter appeler
            pst.setString(cnt++, valeur);
        }
     
        ResultSet rs = pst.exeuteQuery();
     
       // Finir le traitement sur le ResultSet pour en faire ce qu'on veut.
    }

  8. #8
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par skyangel Voir le message
    Oui c'est à peu pres ca. Sauf que j'utilises un business pattern. J'aimerai donc que dans ma couche graphique il n 'y a aucune notion de sql ou autres.
    En plus, le nombre de criteres apres le where n 'est pas forcément fixe.

    J'ai regardé du cote de hibernate criteria. Apparrement cela répond entièrement à ce que je veux.
    Mais par contre faut appeler session dans la ligne suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Criteria criteria = session.createCriteria(Preleveur.class);
    Mais le problème est que je n'arrive pas à déterminer session. Je fais appel donc à un locator et un business delegate.
    la session Hibernate est le delegate de l'entity manager…

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        protected Session getHibernateSession() {
        	return (Session)getEntityManager().getDelegate() ;
        }
    -> dans votre DAO/Repository…

    (utilisez les Criteria : c'est la meilleure voie à suivre, car générer le SQL revient à imposer à la couche business de connaître le RDBMS sous-jacent…, c'est mieux de laisser cette responsabilité à l'ORM… )

  9. #9
    Membre éclairé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Par défaut
    (utilisez les Criteria : c'est la meilleure voie à suivre, car générer le SQL revient à imposer à la couche business de connaître le RDBMS sous-jacent…, c'est mieux de laisser cette responsabilité à l'ORM… )
    100% d'accord dans le cadre d'une utilisation hibernate ! Sinon c'est clair que ça sert à rien de mettre en place hibernate...

    Je donnais juste une solution simple (et me semle-t'il efficace) dans le cas d'une construction des requêtes à la main. (ce qui soit dit entre parenthèse colle avec le message initial )

  10. #10
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par JeitEmgie Voir le message
    (utilisez les Criteria : c'est la meilleure voie à suivre, car générer le SQL revient à imposer à la couche business de connaître le RDBMS sous-jacent…, c'est mieux de laisser cette responsabilité à l'ORM… )
    Avec ma méthode, il n'y a aucune connaissance du RDBMS sous-jacent nécessaire.
    Il faut bien sûr connaître le nom de la propriété dans l'entity, mais ça, personne n'y coupe
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 231
    Par défaut
    Par contre quand le critere de selection se trouve dans un objet

    En fait,

    Personne possède une 'adresse'. Adresse possede un Objet 'Commune'

    Le critere de selection se fait sur l'objet commune .
    Est ce que en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select c from Preleveur c where 1=1
    Je dois faire un left join sur les autres objets ? non ?
    comme par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    StringBuilder sb = new StringBuilder(80);
            sb.append("select c,p from Preleveur c,Adresse p left join c.adresse" +
                    "left join  p.mCommune where 1=1");
     
            SQLParametersUtils.addCriteria(sb, " and ", "p.cp", "02460");
     
            Query query =(Query) getEm().createQuery(sb.toString());
           SQLParametersUtils.addParameter(sb, query, "p.cp", "02460");
    Mais ca marche pas:

    Mes pojos:

    Personne
    possede Adresse

    Adresse
    possede Commune

    Commune
    cp
    ville

    Je recherche à filtrer par ville tous mes personnes. J'ai du mal avec les requetes JPQL etant donné que ce sotn des requetes sur objets

  12. #12
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par OButterlin Voir le message
    Avec ma méthode, il n'y a aucune connaissance du RDBMS sous-jacent nécessaire.
    Il faut bien sûr connaître le nom de la propriété dans l'entity, mais ça, personne n'y coupe
    c'est pas le nom de la propriété qu'il faut connaître mais le nom de la colonne associée… ce qui est déjà une contrainte de maintenance…
    (à moins d'utiliser Reflect pour accéder à l'annotation… et en extraire le nom de la colonne…)

    quant à la connaissance du RDBMS, elle apparaîtra un jour où l'autre de manière sournoise au détour d'une optimisation de jointure, d'un cast de type, d'une fonction disponible dans tel SQL et pas dans un autre, …

    mais évidemment tant que vous ne cherchez que dans des varchar de l'entité principale, vous êtes relativement à l'abri…

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 231
    Par défaut
    Citation Envoyé par OButterlin Voir le message
    Avec ma méthode, il n'y a aucune connaissance du RDBMS sous-jacent nécessaire.
    Il faut bien sûr connaître le nom de la propriété dans l'entity, mais ça, personne n'y coupe


    up. Mais comment faire quand j ai des join à faire?

    Je fais cete méthode là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    sb.append("select p from Preleveur p  join p.adresse   where 1=1 ");
            SQLParametersUtils.addCriteria(sb, " and ", "p.adresse.mCommune.ville", "Jemappes");
            System.out.println(sb.toString());
     
            query = getEm().createQuery(sb.toString());
            SQLParametersUtils.addParameter(sb, query, ":p.adresse.mCommune.ville", "Jemappes");
            System.out.println(query.toString());
    mais il n'aime pas les '.' du p.adresse.mCommune.ville
    Il me sort une erreur du type :
    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
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    Exception in thread "AWT-EventQueue-0" javax.ejb.EJBException: nested exception is: java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
            java.rmi.RemoteException: null; nested exception is: 
            java.lang.NullPointerException
    java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
            java.rmi.RemoteException: null; nested exception is: 
            java.lang.NullPointerException
            at com.sun.corba.ee.impl.javax.rmi.CORBA.Util.mapSystemException(Util.java:243)
            at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.privateInvoke(StubInvocationHandlerImpl.java:205)
            at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.invoke(StubInvocationHandlerImpl.java:152)
            at com.sun.corba.ee.impl.presentation.rmi.bcel.BCELStubBase.invoke(BCELStubBase.java:225)
            at fr.hh.com.session.recherche.__RechercheRemote_Remote_DynamicStub.rechercheObjet(fr/hh/com/session/recherche/__RechercheRemote_Remote_DynamicStub.java)
            at fr.hh.com.session.recherche._RechercheRemote_Wrapper.rechercheObjet(fr/hh/com/session/recherche/_RechercheRemote_Wrapper.java)
            at fr.hh.com.delegate.RechercheDelegate.rechercheObjet(RechercheDelegate.java:20)
            at fr.hh.com.gui.ChercheClientFrame.<init>(ChercheClientFrame.java:32)
            at fr.hh.com.gui.EnregistrementFrame.listeClient1ActionPerformed(EnregistrementFrame.java:414)
            at fr.hh.com.gui.EnregistrementFrame.access$100(EnregistrementFrame.java:19)
            at fr.hh.com.gui.EnregistrementFrame$2.actionPerformed(EnregistrementFrame.java:174)
            at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
            at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
            at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
            at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
            at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
            at java.awt.Component.processMouseEvent(Component.java:6038)
            at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
            at java.awt.Component.processEvent(Component.java:5803)
            at java.awt.Container.processEvent(Container.java:2058)
            at java.awt.Component.dispatchEventImpl(Component.java:4410)
            at java.awt.Container.dispatchEventImpl(Container.java:2116)
            at java.awt.Component.dispatchEvent(Component.java:4240)
            at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
            at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
            at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
            at java.awt.Container.dispatchEventImpl(Container.java:2102)
            at java.awt.Window.dispatchEventImpl(Window.java:2429)
            at java.awt.Component.dispatchEvent(Component.java:4240)
            at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
            at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
            at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
            at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
            at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
    Caused by: java.rmi.RemoteException: null; nested exception is: 
            java.lang.NullPointerException
            at com.sun.enterprise.iiop.POAProtocolMgr.mapException(POAProtocolMgr.java:251)
            at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1386)
            at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1316)
            at com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:210)
            at com.sun.ejb.containers.EJBObjectInvocationHandlerDelegate.invoke(EJBObjectInvocationHandlerDelegate.java:117)
            at $Proxy299.rechercheObjet(Unknown Source)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
            at java.lang.reflect.Method.invoke(Method.java:597)
            at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:154)
            at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:687)
            at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:227)
            at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1846)
            at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1706)
            at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:1088)
            at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:223)
            at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:806)
            at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.dispatch(CorbaMessageMediatorImpl.java:563)
            at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.doWork(CorbaMessageMediatorImpl.java:2567)
            at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:555)
    Caused by: java.lang.NullPointerException
            at org.hibernate.hql.ast.HqlSqlWalker.lookupProperty(HqlSqlWalker.java:451)
            at org.hibernate.hql.antlr.HqlSqlBaseWalker.addrExpr(HqlSqlBaseWalker.java:4326)
            at org.hibernate.hql.antlr.HqlSqlBaseWalker.addrExprLhs(HqlSqlBaseWalker.java:4830)
            at org.hibernate.hql.antlr.HqlSqlBaseWalker.addrExpr(HqlSqlBaseWalker.java:4311)
            at org.hibernate.hql.antlr.HqlSqlBaseWalker.addrExprLhs(HqlSqlBaseWalker.java:4830)
            at org.hibernate.hql.antlr.HqlSqlBaseWalker.addrExpr(HqlSqlBaseWalker.java:4311)
            at org.hibernate.hql.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:1212)
            at org.hibernate.hql.antlr.HqlSqlBaseWalker.exprOrSubquery(HqlSqlBaseWalker.java:4041)
            at org.hibernate.hql.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:3528)
            at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1762)
            at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1690)
            at org.hibernate.hql.antlr.HqlSqlBaseWalker.whereClause(HqlSqlBaseWalker.java:776)
            at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:577)
            at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281)
            at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229)
            at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:228)
            at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:160)
            at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:111)
            at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
            at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:56)
            at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)
            at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
            at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
            at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1623)
            at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:92)
            at com.sun.enterprise.util.EntityManagerWrapper.createQuery(EntityManagerWrapper.java:662)
            at fr.hh.com.session.recherche.RechercheBean.rechercheObjet(RechercheBean.java:40)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
            at java.lang.reflect.Method.invoke(Method.java:597)
            at com.sun.enterprise.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1067)
            at com.sun.enterprise.security.SecurityUtil.invoke(SecurityUtil.java:176)
            at com.sun.ejb.containers.BaseContainer.invokeTargetBeanMethod(BaseContainer.java:2895)
            at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:3986)
            at com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:203)
            ... 17 more
    javax.ejb.EJBException: nested exception is: java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
            java.rmi.RemoteException: null; nested exception is: 
            java.lang.NullPointerException
            at fr.hh.com.session.recherche._RechercheRemote_Wrapper.rechercheObjet(fr/hh/com/session/recherche/_RechercheRemote_Wrapper.java)
            at fr.hh.com.delegate.RechercheDelegate.rechercheObjet(RechercheDelegate.java:20)
            at fr.hh.com.gui.ChercheClientFrame.<init>(ChercheClientFrame.java:32)
            at fr.hh.com.gui.EnregistrementFrame.listeClient1ActionPerformed(EnregistrementFrame.java:414)
            at fr.hh.com.gui.EnregistrementFrame.access$100(EnregistrementFrame.java:19)
            at fr.hh.com.gui.EnregistrementFrame$2.actionPerformed(EnregistrementFrame.java:174)
            at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
            at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
            at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
            at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
            at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
            at java.awt.Component.processMouseEvent(Component.java:6038)
            at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
            at java.awt.Component.processEvent(Component.java:5803)
            at java.awt.Container.processEvent(Container.java:2058)
            at java.awt.Component.dispatchEventImpl(Component.java:4410)
            at java.awt.Container.dispatchEventImpl(Container.java:2116)
            at java.awt.Component.dispatchEvent(Component.java:4240)
            at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
            at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
            at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
            at java.awt.Container.dispatchEventImpl(Container.java:2102)
            at java.awt.Window.dispatchEventImpl(Window.java:2429)
            at java.awt.Component.dispatchEvent(Component.java:4240)
            at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
            at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
            at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
            at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
            at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
    BUILD SUCCESSFUL (total time: 4 minutes 21 seconds)
    Par contre si je le mets directement dans la requete ca passe. En fait je pense que c'est dans la chaine String :p.adresse.mCommune.ville
    Vous avez une idée.

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

Discussions similaires

  1. [ASA 8] Procédure stockée et requete dynamique
    Par Xavier38 dans le forum Sybase
    Réponses: 3
    Dernier message: 14/02/2006, 15h20
  2. MigrationForms6i_9i&Requete-Dynamique-Reoprts
    Par dev_ora_moimeme dans le forum Reports
    Réponses: 4
    Dernier message: 11/01/2006, 11h17
  3. requetes dynamique
    Par ghostdog dans le forum C
    Réponses: 3
    Dernier message: 17/10/2005, 15h45
  4. requete dynamique
    Par cyrill.gremaud dans le forum ASP
    Réponses: 2
    Dernier message: 14/09/2005, 17h49
  5. requete dynamique
    Par Tigresse dans le forum Requêtes
    Réponses: 2
    Dernier message: 01/08/2003, 15h52

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