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 :

Problème de ClassCastException avec Character et un String


Sujet :

Hibernate Java

  1. #1
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 219
    Par défaut Problème de ClassCastException avec Character et un String
    Bonjour a tous
    j ai un trouble de probleme de ClassCastException envers un
    et un String voici mon dao
    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
    public List<TprchsSaleTrans> findTprchsSaleTrans()
    {
      List<Object> l = null;
      TprchsSaleTrans prchsSaleTrans = null;
      List<TprchsSaleTrans> listReturn = new ArrayList<TprchsSaleTrans>();
    try {
    l = this.getHibernateTemplate().[B]findByNamedQuery[/B("tprchsSaleTransQuery");
    for (Object list : l) 
    {
        Object[] element = (Object[]) list;
        prchsSaleTrans = new TprchsSaleTrans();
        prchsSaleTrans.setTprchssaletransID((Integer) element[0]);
          //dans la bd BranchCd = 199 et hibernate me sort seulement le 1 char
         prchsSaleTrans.setBranchCd((String) element[1]);
    listReturn.add(prchsSaleTrans);......
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return listReturn;
    	}
    }
    mon mapping
    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
    <hibernate-mapping>
        <class name="TprchsSaleTrans" table="tprchs_sale_trans">
             <id name="tprchssaletransID" type="java.lang.Integer">
                <column name="tprchs_sale_trans_ID" />
                <generator class="identity" />
            </id>
                <property name="accountCd" type="string">
                    <column name="account_cd" length="5" />
                </property>
                <property name="branchCd" type="string">
                    <column name="branch_cd" length="3" />
                </property>....
     </class>
         <sql-query name="tprchsSaleTransQuery">
    		<![CDATA[select tprchs_sale_trans_ID,branch_cd,account_cd,type_account_cd,chck_brch_acct_nbr, transaction_dt,currency_cd,sum(case when debit_credit_cd = 'C' then tran_total_amt * -1 else tran_total_amt  end) as net FROM tprchs_sale_trans where  CONVERT(varchar(20), transaction_dt,105 )   = CONVERT(varchar(20),GETDATE(),105) or (CONVERT(varchar(20), processing_dt,105 )   = CONVERT(varchar(20),GETDATE()-1,105) and  transaction_dt  <=   GETDATE() ) GROUP by branch_cd,account_cd,type_account_cd,chck_brch_acct_nbr,transaction_dt,currency_cd,tprchs_sale_trans_ID]]>
    	</sql-query>
    </hibernate-mapping>
    et dans mon pojo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private String branchCd;
    bien sur un String
    et pour finir la declaration dans la bd
    branch_cd char size= 3

    je comprends vraiment pas pourquoi hibernate me sort un char!!
    Est ce qu ily a quelqu un qui peut m aider svp

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    tu utilise une SQL query, donc ça va utiliser les types définis par la table et renvoyé par jdbc, et non pas les types définis dans le mapping, car on est une couche plus bas.

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 219
    Par défaut
    merci je comprends maintenant donc, je dois y alle avec hql. Je me demade bien si hql suppote les CASE et aussi CONVERT

    pour l instant j ai une erreur de compilation
    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
     
    public List<TprchsSaleTrans> findTprchsSaleTrans()
    	{
    		List<Object> l = null;
    		TprchsSaleTrans prchsSaleTrans = null;
    		List<TprchsSaleTrans> listReturn = new ArrayList<TprchsSaleTrans>();
    		try {			
    			String varHql = "select sale.tprchssaletransID,sale.branchCd,sale.accountCd,sale.typeAccountCd,sale.chckBrchAcctNbr, sale.transactionDt,sale.currencyCd ,sum(case when sale.debitCreditCd ='C' then sale.tranTotalAmt * -1 else sale.tranTotalAmt  end) as net FROM TprchsSaleTrans sale GROUP by sale.branchCd,sale.accountCd,sale.typeAccountCd,sale.chckBrchAcctNbr,sale.transactionDt,sale.currencyCd,sale.tprchssaletransID";
    			l = getSession().createQuery(varHql).list();
    			for (Object list : l) {
    				Object[] element = (Object[]) list;
     
    				prchsSaleTrans = new TprchsSaleTrans();
    				prchsSaleTrans.setTprchssaletransID((Integer) element[0]);
     
    				prchsSaleTrans.setBranchCd((String) element[1]);
    				prchsSaleTrans.setAccountCd((String) element[2]);
    				prchsSaleTrans.setTypeAccountCd((Character) element[3]);
    				prchsSaleTrans.setChckBrchAcctNbr((Character) element[4]);
    				prchsSaleTrans.setTransactionDt((Date) element[5]);
    				prchsSaleTrans.setCurrencyCd((String) element[6]);
    				prchsSaleTrans.setNet((BigDecimal) element[7]);
    				listReturn.add(prchsSaleTrans);
     
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return listReturn;
    	}
    java.lang.NoClassDefFoundError: antlr/ANTLRException
    at org.hibernate.hql.ast.ASTQueryTranslatorFactory.createQueryTranslator(ASTQueryTranslatorFactory.java:35)
    at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:74)
    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 TprchsSaleTransDao.findTprchsSaleTrans(TprchsSaleTransDao.java:28)
    at TprchsSaleTransDaoTest.testFindTprchsSaleTrans(TprchsSaleTransDaoTest.java:26)
    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:585)
    at junit.framework.TestCase.runTest(TestCase.java:168)
    at junit.framework.TestCase.runBare(TestCase.java:134)
    at junit.framework.TestResult$1.protect(TestResult.java:110)
    at junit.framework.TestResult.runProtected(TestResult.java:128)
    at junit.framework.TestResult.run(TestResult.java:113)
    at junit.framework.TestCase.run(TestCase.java:124)
    at junit.framework.TestSuite.runTest(TestSuite.java:232)
    at junit.framework.TestSuite.run(TestSuite.java:227)
    at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:79)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
    ou au niveau du hql editor
    org.hibernate.hql.ask.QuerySyntaxException:*near line 1 colunm 198[select sale.tprchssaletransID,sale.branchCd,sale.accountCd,sale.typeAccountCd,sale.chckBrchAcctNbr, sale.transactionDt,sale.currencyCd ,sum(case when sale.debitCreditCd =]
    il semble qu il a de difficulte avec sale.debitCreditCd ='C'

    merci d avance ou then sale.tranTotalAmt * (-1)
    la multiplication *-1

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    la première exception correspond à l'absence de antlr dans tes librairies, rajoute la, hibernate en a besoin.

  5. #5
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 219
    Par défaut
    merci maintenant , j ai ajouté le jar en question
    j essaie de passé en hsql sur le hql editor
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select sale.tprchssaletransID,sale.branchCd,sale.accountCd,sale.typeAccountCd,sale.chckBrchAcctNbr, sale.transactionDt,sale.currencyCd ,sum(case when sale.debitCreditCd ='C' then (sale.tranTotalAmt * -1) else sale.tranTotalAmt  end) as net FROM TprchsSaleTrans sale GROUP by sale.branchCd,sale.accountCd,sale.typeAccountCd,sale.chckBrchAcctNbr,sale.transactionDt,sale.currencyCd,sale.tprchssaletransID
    ca fonctionne ma . J ai comme erreur

    org.hibernate.hql.ask.QuerySyntaxException:TprchsSaleTrans is not mapped
    [select sale.tprchssaletransID,sale.branchCd,sale.accountCd,sale.typeAccountCd,sale.chckBrchAcctNbr, sale.transactionDt,sale.currencyCd ,sum(case when sale.debitCreditCd ='C' then (sale] il s'arrete a sale
    deuxieme petit truc si je veux reste avec sql
    il doit surement avoir une solution
    pour passe la requette
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <sql-query name="tprchsSaleTransQuery">
    		<![CDATA[select tprchs_sale_trans_ID,branch_cd,account_cd,type_account_cd,chck_brch_acct_nbr, transaction_dt,currency_cd,sum(case when debit_credit_cd = 'C' then tran_total_amt * -1 else tran_total_amt  end) as net FROM tprchs_sale_trans where  CONVERT(varchar(20), transaction_dt,105 )   = CONVERT(varchar(20),GETDATE(),105) or (CONVERT(varchar(20), processing_dt,105 )   = CONVERT(varchar(20),GETDATE()-1,105) and  transaction_dt  <=   GETDATE() ) GROUP by branch_cd,account_cd,type_account_cd,chck_brch_acct_nbr,transaction_dt,currency_cd,tprchs_sale_trans_ID]]>
    	</sql-query>
    et avoir plus qu'un caractere pour
    branch_cd char size= 3 en reponse.
    Hibernate n'a pas toujours existe.On fesait quoi avant
    merci d avance

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    tu peux garder le SQL, mais tu dois alors regarder ton exception de départ pour savoir à quel ligne tu utilise le mauvais type, quel est le type renvoyé par la db et corriger ton code.

    Maintenant, oui on utilisait du SQL avant hibernate, c'est juste qu'il est en général préférable de rester dans la couche hibernante plutot que d'attaquer la couche SQL.

    Enfin pour ta dernière erreur, elle dit clairement que TprchsSaleTrans n'est pas une classe mappée dans hibernate, donc il sais pas quoi en faire.

  7. #7
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 219
    Par défaut
    rebonjour a tous
    alors tchize_ dit
    tu peux garder le SQL, mais tu dois alors regarder ton exception de départ pour savoir à quel ligne tu utilise le mauvais type, quel est le type renvoyé par la db et corriger ton code.
    ok je rappelle la situation
    dans mon mapping, j ai exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <property name="branchCd" type="string">
        <column name="branch_cd" length="3" />
    </property>
    et dans le ddl
    on a branch_cd char size= 3
    je le vois bien que c est un char donc
    sql de jdbc me retour pour branch_cd
    au lieu de 009
    j ai meme essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     <property name="branchCd" type="char[]">
          <column name="branch_cd"  />
     </property>
    meme resultat.
    Alors qu est ce que je dois changer pour reste
    avec SQL et avoir le resultat voulu.
    Sois 009 au lieu de 0 merci

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    les query SQL n'utilisent pas le mapping de classe, donc changer ton mapping ne changera rien. C'est un requete sql, tu récupère les données brutes du conencteur JDBC. Java te dit que tu ne peux pas caster depuis le type XXXX (à déterminer tu l'a pas mis dans ton message) en String, tu dois donc changer dans ton code String en le Type en question (qu'on ne connais pas à toi de le chercher, il est dans le message d'erreur, mais comme tu ne l'a pas posté en complet)

  9. #9
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 219
    Par défaut
    rebonjour tchize_ . tchize_ dit
    Java te dit que tu ne peux pas caster depuis le type XXXX (à déterminer tu l'a pas mis dans ton message) en String, tu dois donc changer dans ton code String en le Type en question
    Je m'excuse c est peut etre moi qui ne suit pas vite mais le query sql
    me donne 0 un Character. C*est sur si je le cast en Character ca va marche mais avec 0 comme donne. Et quand je fais la meme requete avec Squirrel la vrai valeur c est 009 . Ca marche pas la
    ps.j utilise SQL SERVEUR

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    hibernate n'a rien a voir dans l'historie (il se contente de prendre ta query et de la balancer au connecteur jdbc). J'ai enfin capté quel est ton problème (je suppose que j'aurais du voir les commentaires dans le code du post d'origine) Tu peux nous dire comment ta table a été créée (la query "create table .....")? Tu te connecte comment à SQL serveur (quel driver)?

  11. #11
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 219
    Par défaut [Resolue]J ai trouve
    je savais que hibernate n avait rien a voir. Parce que je faisais du sql query mais le problème venait du driver sql server , je crois alors ma requete qui etait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <sql-query name="tprchsSaleTransQuery">
    <![CDATA[select branch_cd,....]]>
    	</sql-query>
    est devenue

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <sql-query name="tprchsSaleTransQuery">
    <![CDATA[select (''+branch_cd+'')branch_cd,....]]>
    	</sql-query>
    merci beaucoup tchize_.
    tu m as vraiment aide
    www.developpez.net/forums
    sont les meilleurs
    a la prochaine

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    j'allais suggérer la même horreur, mais ca reste moche.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/04/2010, 20h01
  2. Problème avec startsWith sur un String
    Par s-ehtp dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 15/08/2009, 01h45
  3. Problème avec des tableaux de string
    Par Electroniktor dans le forum C++
    Réponses: 2
    Dernier message: 15/03/2008, 15h29
  4. [Tableaux] Problème de tableau avec les strings
    Par roxxxy dans le forum Langage
    Réponses: 4
    Dernier message: 09/03/2007, 11h04
  5. (Problème avec...) conversion de std::string en char
    Par crossbowman dans le forum SL & STL
    Réponses: 7
    Dernier message: 05/03/2006, 19h54

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