posts - 262,  comments - 221,  trackbacks - 0

          如題,Oracle數(shù)據(jù)庫里面有一批記錄,現(xiàn)在我想根據(jù)其中一個(gè)叫: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')


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

          我實(shí)在不明白為什么會(huì)報(bào)這個(gè)錯(cuò)誤,難道Hibernate在set date或者set string之前不會(huì)對(duì)其進(jìn)行格式的轉(zhuǎn)換嗎?于是我又換了另外一個(gè)HQL語句,在代碼里面提前將Date格式成String,但還是報(bào)錯(cuò):

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

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

          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();
              }

            }
          );
          }


          不知道各位能否解析一下上面那個(gè)報(bào)錯(cuò)的原因,謝謝先了!



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

          常用鏈接

          留言簿(21)

          隨筆分類

          隨筆檔案

          BlogJava熱點(diǎn)博客

          好友博客

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 博客| 桑植县| 洛隆县| 涞源县| 肇州县| 哈密市| 澄迈县| 麦盖提县| 铁力市| 监利县| 陇川县| 大庆市| 余江县| 慈利县| 惠来县| 宣汉县| 和政县| 延安市| 新竹市| 布拖县| 巴青县| 上栗县| 兴和县| 遵化市| 天津市| 马关县| 罗平县| 涡阳县| 玉树县| 孝感市| 大城县| 霍州市| 正安县| 桦南县| 贵定县| 连山| 凌源市| 古丈县| 石嘴山市| 女性| 太湖县|