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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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.

+ 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