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 :

HibernateQueryException: Expected positional parameter count: 2


Sujet :

Hibernate Java

  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2003
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 175
    Par défaut HibernateQueryException: Expected positional parameter count: 2
    Bonjour,
    je me casse la tete depuis 2 jours sur cette erreur:
    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
     
     
    Exception in thread "main" org.springframework.orm.hibernate3.HibernateQueryException: Expected positional parameter count: 2, actual parameters: [11641] [select content_id  as {stat.contentid}, count(content_id) as {stat.number} from contentviewed where visitor_id in 
            (select visitor_id from contentviewed where content_id = ? ) and content_id != ? group by content_id order by
            count(content_id) LIMIT 5;]; nested exception is org.hibernate.QueryException: Expected positional parameter count: 2, actual parameters: [11641] [select content_id  as {stat.contentid}, count(content_id) as {stat.number} from contentviewed where visitor_id in 
            (select visitor_id from contentviewed where content_id = ? ) and content_id != ? group by content_id order by
            count(content_id) LIMIT 5;]
    Caused by: org.hibernate.QueryException: Expected positional parameter count: 2, actual parameters: [11641] [select content_id  as {stat.contentid}, count(content_id) as {stat.number} from contentviewed where visitor_id in 
            (select visitor_id from contentviewed where content_id = ? ) and content_id != ? group by content_id order by
            count(content_id) LIMIT 5;]
    	at org.hibernate.impl.AbstractQueryImpl.verifyParameters(AbstractQueryImpl.java:319)
    	at org.hibernate.impl.SQLQueryImpl.verifyParameters(SQLQueryImpl.java:201)
    	at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:145)
    	at org.springframework.orm.hibernate3.HibernateTemplate$32.doInHibernate(HibernateTemplate.java:906)
    .............
    ..............
    Ma requete en elle meme est la suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
     <sql-query  name="contentAlsoViewed">
    	  <return alias="stat"  class="com.entities.content.ContentViewedInfo"></return>
         <![CDATA[      
          	select content_id  as {stat.contentid}, count(content_id) as {stat.number} from contentviewed where visitor_id in 
            (select visitor_id from contentviewed where content_id = ? ) and content_id != ? group by content_id order by
            count(content_id) LIMIT 5;
         ]]>    
      </sql-query>
    je n´arrive pas À debloquer la situation malgré les recherche sur le net. Ca a certainement à voir avec les parametres (?), en fait c´est un seul parametre qui doit remplacer les 2 ? de ma requete. J´ai pour mon exemple utilisé le chiffre 11641, et j´ai testé la requete avec les parametres rentrés en "dur" elle marche.
    J´appele cette requette dans ma methode Service:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    getHibernateTemplate().findByNamedQuery("contentAlsoViewed",contentId);
    J´ai lu quelque part que ce genre d´erreur pourrait provenir du "and" de la requete.
    Qu´est ce qui fait probleme dessus?
    Merci

  2. #2
    Membre chevronné Avatar de supermanu
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    330
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 330
    Par défaut
    Il faut que tu passes 2 paramètres à ta requête (même si c'est le même).
    Donc je pense que tu peux utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    findByNamedQuery(String queryName,Object[] values)
    http://static.springframework.org/spring/docs/2.5.x/api/org/springframework/orm/hibernate3/HibernateTemplate.html#findByNamedQuery(java.lang.String,%20java.lang.Object[])

    Donc tu fais un tableau à 2 éléments et tu mets contentId dans chaque case.

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2003
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 175
    Par défaut
    Rebonjour,
    effectivement j´ai fait comme supermanu m´a conseillé et avec les String ca marche. Je voudrai faire la meme chose mais avec des variables de type long, mais j´ai le meme probleme et pourtant j´ai utilisé la meme methode:

    Avec les variables de type String ca marche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    String[] theId = {id,id};
    findByNamedQuery("param",theId);
    Avec les type long voila ce que je fait et ca marche pas:

    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
     
    public void writeinto(long parent,long child){
     
    		 long[] params ={parent,child};	
    		  .....findByNamedQuery("write", params);
    ...
    }
     
    Ma requete:
        <sql-query  name="write">
    	  <return  class="Viewed"></return>
         <![CDATA[      
               insert into viewed (parent_content_id, child_content_id) values (?,?);           
         ]]>    
      </sql-query>
     
    j´appele ici:
     
    writeinto(11641,12884);
     
    Message d´errreur:
    Exception in thread "main" org.springframework.orm.hibernate3.HibernateQueryException: Expected positional parameter count: 2, actual parameters: [[J@164cbde] [insert into viewed (parent_content_id, child_content_id) values (?,?);]; nested exception is org.hibernate.QueryException: Expected positional parameter count: 2, actual parameters: [[J@164cbde] [insert into viewed (parent_content_id, child_content_id) values (?,?);]
    Caused by: org.hibernate.QueryException: Expected positional parameter count: 2, actual parameters: [[J@164cbde] [insert viewed (parent_content_id, child_content_id) values (?,?);]
    	at org.hibernate.impl.AbstractQueryImpl.verifyParameters(AbstractQueryImpl.java:319)
    il ne considere pas ma declaration long[] avec findByNamedQuery(String queryName,Object[] values) mais plutot findByNamedQuery(String queryName,Object value)...


    Une idée?
    A bientot

  4. #4
    Membre chevronné Avatar de supermanu
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    330
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 330
    Par défaut
    hummm...
    tu utilises un tableau de primitifs : long
    essaie un tableau d'objets Long
    on ne sait jamais...

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2003
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 175
    Par défaut
    et les parametres long parent,long child je les laisse tel quel?
    merci

  6. #6
    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
    Bon, je ne sais pas ce que fait ta méthode findByNamedQuery(...) mais en hibernate, ça se ferait comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    le plus compact :
     
    return session.getNamedQuery("leNom").setLong(0, leLong).setLong(1, leLong).list();
     
    le plus lisible :
     
    Query query = session.getNamedQuery("leNom");
    query.setLong(0, leLong);
    query.setLong(1, leLong);
    return query.list();
    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre chevronné Avatar de supermanu
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    330
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 330
    Par défaut
    Peut-être que ça marchera si tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Long[] params ={parent,child};
    Si tu es en java 1.5, tu peux laisser parent et child en long (ils seront convertis automatiquement en Long.
    Et tu auras bien un tableau d'objets.

    Sinon essaie la méthode de OButterlin

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/04/2015, 17h19
  2. [MySQL] warning message : wrong parameter count
    Par sheisqo dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 05/11/2008, 14h16
  3. [ODBC] Wrong parameter count for odbc_do()
    Par loulitta dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 04/07/2008, 08h48
  4. Erreur Wrong parameter count for opendir()
    Par makohsarah dans le forum Langage
    Réponses: 2
    Dernier message: 29/08/2007, 09h14
  5. Wrong parameter count for mysql_result()
    Par eon-of-the-scorn dans le forum Langage
    Réponses: 3
    Dernier message: 28/07/2006, 17h40

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