posts - 262,  comments - 221,  trackbacks - 0

          如題,Oracle數據庫里面有一批記錄,現在我想根據其中一個叫:txn_date的字段來查詢記錄,在Hbm文件中我配置了該HQL,如下所示:

          <sql-query name="job.getJobByDate">
              select {job.*} from Newsletter_Message job 
               where to_char(:dateType,'yyyy-mm-dd hh24:mi') = 
                     to_char(:jobDate, 'yyyy-mm-dd hh24:mi')
          <return alias="job"
                  class
          ="com.newsletter.domain.job.Job" />
          </sql-query>


          在DAO方法中我使用了Spring的HibernateTemplate,方法如下:

          public List<Job> getJobByDate(final Date jobDate, final String dateType) {
           
          return (List<Job>
            getHibernateTemplate().executeFind(
              
          new HibernateCallback() 

                
          public
           Object doInHibernate(Session session)
                    
          throws HibernateException 
          {
                  Query query 
          = session.getNamedQuery("job.getJobByDate"
          );
                  query.setString(
          "dateType"
          , dateType);
                  query.setDate(
          "jobDate"
          ,jobDate);
                  
          return
           query.list();
                }

           }
          );
          }


          Hibernate生成的SQL語句如下

          select job.TXN_NO as TXN1_5_0_,
                 job.TXN_TYPE 
          as
           TXN2_5_0_,
                 job.TXN_DATE 
          as
           TXN3_5_0_, 
            
          from
           Newsletter_Message job
           
          where to_char(?, 'yyyy-mm-dd hh24:mi'= to_char(?, 'yyyy-mm-dd hh24:mi')


          每次執行時,總是拋異常,說:
          org.springframework.dao.DataIntegrityViolationException: Hibernate operation: could not execute query;
          .....
          Caused by: java.sql.SQLException: ORA-01722: invalid number

          我實在不明白為什么會報這個錯誤,難道Hibernate在set date或者set string之前不會對其進行格式的轉換嗎?于是我又換了另外一個HQL語句,在代碼里面提前將Date格式成String,但還是報錯:

          where to_char(dateType,'yyyy-mm-dd hh24:mi') = :strDate

          后來實在沒辦法了,用了一陰招,代碼如下,測試通過,但是覺得這種代碼太丑陋了。

          public List<Job> getJobByDate(final Date jobDate, final String dateType) {
            
          return getHibernateTemplate().executeFind(new HibernateCallback() 
          {
              
          public
           Object doInHibernate(Session session)
                  
          throws HibernateException 
          {

               String strDate 
          =
           DateUtil.convertDateToString(jobDate,
                                      
          "yyyy-MM-dd HH:mm"
          );
              Query query 
          = session.createQuery("from Job job where "

                                  
          + "to_char(" + dateType + ",'yyyy-mm-dd hh24:mi') = '"
                                   
          + strDate + "'");
              
          return (List<Job>
          ) query.list();
              }

            }
          );
          }


          不知道各位能否解析一下上面那個報錯的原因,謝謝先了!



          -------------------------------------------------------------
          生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。
          posted on 2008-05-22 16:40 Paul Lin 閱讀(2264) 評論(0)  編輯  收藏 所屬分類: J2EE 框架
          <2008年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿(21)

          隨筆分類

          隨筆檔案

          BlogJava熱點博客

          好友博客

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 万州区| 孝感市| 晋宁县| 壶关县| 特克斯县| 滦平县| 江口县| 哈巴河县| 宿迁市| 华亭县| 黑山县| 宜城市| 那坡县| 北海市| 普格县| 丁青县| 米脂县| 牟定县| 兴业县| 沙坪坝区| 新兴县| 南昌县| 龙井市| 榆树市| 玉龙| 焉耆| 封开县| 黄山市| 怀仁县| 冷水江市| 普宁市| 林西县| 北辰区| 泰安市| 镇宁| 杭锦后旗| 重庆市| 惠东县| 波密县| 中西区| 门头沟区|