0 0

使用HQL查询Oracle日期字段,报"Invalid number" 10

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



不知道各位能否解析一下上面那个报错的原因,谢谢先了!
2008年5月22日 16:52

2个答案 按时间排序 按投票排序

0 0

采纳的答案

把 query.setDate("jobDate",jobDate);  
改成 query.setTimestamp("jobDate",jobDate);   试试

2008年5月23日 01:02
0 0

Date转化成字符串后是Fri May 23 23:21:28 CST 2008  之类的东西,
而你的HQL语句是'yyyy-mm-dd hh24:mi'格式的,当然要抛异常啊
建议格式化一下date类型的数据,如
Date date=new Date();
SimpleDateFormat format=new SimpleDateFormat();

format.applyPattern("yyyy-MM-dd HH:MM");
String temp=format.format(date);

2008年5月23日 23:28

相关推荐

    hibernate 调用oracle函数

    4. **定义Hibernate Native SQL查询**:由于Hibernate默认不支持调用存储过程或函数,我们需要使用`@NamedNativeQuery`或`@SqlResultSetMapping`注解来定义一个原生SQL查询,用于调用Oracle函数。例如: ```java @...

    HQL查询及语法

    ### HQL查询及语法详解 #### 一、HQL简介 HQL,全称为Hibernate Query Language,是Hibernate框架提供的一种面向对象的查询语言。它基于SQL标准,但更加强调对象模型,支持Java中的对象关系映射(ORM),能够处理...

    HQL查询pdf资料

    HQL查询的基本结构包括关键字如`SELECT`、`FROM`、`WHERE`、`GROUP BY`、`HAVING`、`ORDER BY`等,这些关键字的使用与SQL非常相似,但是HQL还支持面向对象的特性,如属性路径表达式。 ##### 实体的更新与删除 在...

    hql模糊查询hql模糊查询

    在这个示例中,我们首先定义了一个HQL查询字符串,该字符串指定了查询的类(Subject)以及模糊匹配的字段(subname 和 subinfo)。接着,我们通过`session.createQuery()`方法创建了一个`Query`对象,并使用`...

    HQL查询.ppt

    HQL查询 帮助文档

    hibernate hql各类查询范例

    以上内容涉及了使用 HQL 和 DetachedCriteria 进行查询、参数化查询、执行更新操作以及简单的统计查询等常见的 Hibernate 操作。这些知识点对于理解和掌握 Hibernate 框架的基本使用至关重要,同时也是开发基于 ...

    hibernateHQL关联查询

    ### Hibernate HQL 关联查询详解 #### 一、引言 在进行数据库操作时,关联查询是必不可少的一部分,尤其在处理复杂的数据结构时更是如此。Hibernate作为一种流行的Java持久层框架,提供了强大的对象关系映射(ORM...

    hql语句 使用大全

    当需要同时查询多个字段时,可以在HQL语句中指定这些字段,并通过索引来访问这些字段值: ```java String hql = "select u.name, u.age from com.mypack.User4 u"; Query query = session.createQuery(hql); List ...

    JPA--HQL查询(手动写原生查询sql,复杂查询必备).pdf

    在 JPA 中,使用 HQL 查询需要先获得 EntityManager,通过 @PersistenceContext 注解可以注入 EntityManager,然后使用 createQuery 方法创建查询对象,最后使用 getResultList 方法获取查询结果。 在 HQL 查询中,...

    SSH笔记-HQL查询、QBC、本地SQL查询

    SSH笔记-HQL查询(基于位置参数查询、基于命名参数查询、分页查询、命名查询、投影查询报表查询、内/迫切内/左外/迫切左外连接查询)、QBC(QBC检索查询、统计查询、排序查询、HQL操作数据库)、本地SQL查询

    HQL查询语言基础知识

    HQL 查询语言基础知识 HQL(Hibernate Query Language)是一种面向对象的查询语言,用于...HQL 查询语言基础知识是 Hibernate 框架中非常重要的一部分,掌握 HQL 查询语言可以帮助开发人员更好地使用 Hibernate 框架。

    hibernate query调用oracle存储过程

    本篇文章将深入探讨如何使用Hibernate的Query接口来调用Oracle的存储过程和函数,以及提供相关的示例代码和数据库文件。 首先,让我们了解什么是存储过程和函数。存储过程是预编译的SQL语句集合,可以接受参数、...

    HibernateUtil分装完整版HQL查询

    标题"HibernateUtil分装完整版HQL查询"暗示了这是一个关于使用HibernateUtil工具类来封装和执行HQL(Hibernate Query Language)查询的教程或代码示例。描述中的重复信息进一步强调了这个主题,意味着我们将探讨如何...

    hibernate 查询?Hibernate的HQL查询

    【标题】:深入理解Hibernate的查询机制:HQL查询 【描述】:在ORM框架Hibernate中,数据查询和检索是一个核心功能,它提供了多种查询方式,包括标准化对象查询(Criteria Query)、Hibernate查询语言(HQL)和原生...

    Hibernate HQL查询 分页查询 模糊查询.docx

    HQL(Hibernate Query Language)是一种面向对象的查询语言,它允许开发者使用类及其属性来编写查询语句,而不是传统的SQL语句。这使得开发人员能够更加专注于业务逻辑而不用深入到SQL层面。HQL支持各种复杂的查询,...

    Spring中常用的hql查询方法

    在Spring框架与Hibernate技术结合使用时,HQL(Hibernate Query Language)作为对象查询语言被广泛应用于数据查询操作之中。本文将详细解析Spring框架中常用的HQL查询方法及其应用场景。 #### 一、find(String ...

    HQL连接查询和注解使用总结

    ### HQL连接查询和注解使用总结 #### HQL连接查询概述 HQL(Hibernate Query Language)是一种面向对象的查询语言,它允许开发者以一种更自然的方式查询对象,而不是直接查询底层数据库表。HQL支持多种连接查询...

    Hibernate之HQL查询

    HQL查询的使用极大地提高了开发效率,因为它将数据操作与具体的数据库结构分离。 **1. HQL的基本语法** HQL查询语句结构通常包括以下几个部分:`SELECT`, `FROM`, `WHERE`, `GROUP BY`, `HAVING`, `ORDER BY`。...

Global site tag (gtag.js) - Google Analytics