-
使用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个答案 按时间排序 按投票排序
-
采纳的答案
把 query.setDate("jobDate",jobDate);
改成 query.setTimestamp("jobDate",jobDate); 试试2008年5月23日 01:02
-
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
相关推荐
4. **定义Hibernate Native SQL查询**:由于Hibernate默认不支持调用存储过程或函数,我们需要使用`@NamedNativeQuery`或`@SqlResultSetMapping`注解来定义一个原生SQL查询,用于调用Oracle函数。例如: ```java @...
### HQL查询及语法详解 #### 一、HQL简介 HQL,全称为Hibernate Query Language,是Hibernate框架提供的一种面向对象的查询语言。它基于SQL标准,但更加强调对象模型,支持Java中的对象关系映射(ORM),能够处理...
HQL查询的基本结构包括关键字如`SELECT`、`FROM`、`WHERE`、`GROUP BY`、`HAVING`、`ORDER BY`等,这些关键字的使用与SQL非常相似,但是HQL还支持面向对象的特性,如属性路径表达式。 ##### 实体的更新与删除 在...
在这个示例中,我们首先定义了一个HQL查询字符串,该字符串指定了查询的类(Subject)以及模糊匹配的字段(subname 和 subinfo)。接着,我们通过`session.createQuery()`方法创建了一个`Query`对象,并使用`...
HQL查询 帮助文档
以上内容涉及了使用 HQL 和 DetachedCriteria 进行查询、参数化查询、执行更新操作以及简单的统计查询等常见的 Hibernate 操作。这些知识点对于理解和掌握 Hibernate 框架的基本使用至关重要,同时也是开发基于 ...
### Hibernate HQL 关联查询详解 #### 一、引言 在进行数据库操作时,关联查询是必不可少的一部分,尤其在处理复杂的数据结构时更是如此。Hibernate作为一种流行的Java持久层框架,提供了强大的对象关系映射(ORM...
当需要同时查询多个字段时,可以在HQL语句中指定这些字段,并通过索引来访问这些字段值: ```java String hql = "select u.name, u.age from com.mypack.User4 u"; Query query = session.createQuery(hql); List ...
在 JPA 中,使用 HQL 查询需要先获得 EntityManager,通过 @PersistenceContext 注解可以注入 EntityManager,然后使用 createQuery 方法创建查询对象,最后使用 getResultList 方法获取查询结果。 在 HQL 查询中,...
SSH笔记-HQL查询(基于位置参数查询、基于命名参数查询、分页查询、命名查询、投影查询报表查询、内/迫切内/左外/迫切左外连接查询)、QBC(QBC检索查询、统计查询、排序查询、HQL操作数据库)、本地SQL查询
HQL 查询语言基础知识 HQL(Hibernate Query Language)是一种面向对象的查询语言,用于...HQL 查询语言基础知识是 Hibernate 框架中非常重要的一部分,掌握 HQL 查询语言可以帮助开发人员更好地使用 Hibernate 框架。
本篇文章将深入探讨如何使用Hibernate的Query接口来调用Oracle的存储过程和函数,以及提供相关的示例代码和数据库文件。 首先,让我们了解什么是存储过程和函数。存储过程是预编译的SQL语句集合,可以接受参数、...
标题"HibernateUtil分装完整版HQL查询"暗示了这是一个关于使用HibernateUtil工具类来封装和执行HQL(Hibernate Query Language)查询的教程或代码示例。描述中的重复信息进一步强调了这个主题,意味着我们将探讨如何...
【标题】:深入理解Hibernate的查询机制:HQL查询 【描述】:在ORM框架Hibernate中,数据查询和检索是一个核心功能,它提供了多种查询方式,包括标准化对象查询(Criteria Query)、Hibernate查询语言(HQL)和原生...
HQL(Hibernate Query Language)是一种面向对象的查询语言,它允许开发者使用类及其属性来编写查询语句,而不是传统的SQL语句。这使得开发人员能够更加专注于业务逻辑而不用深入到SQL层面。HQL支持各种复杂的查询,...
在Spring框架与Hibernate技术结合使用时,HQL(Hibernate Query Language)作为对象查询语言被广泛应用于数据查询操作之中。本文将详细解析Spring框架中常用的HQL查询方法及其应用场景。 #### 一、find(String ...
### HQL连接查询和注解使用总结 #### HQL连接查询概述 HQL(Hibernate Query Language)是一种面向对象的查询语言,它允许开发者以一种更自然的方式查询对象,而不是直接查询底层数据库表。HQL支持多种连接查询...
HQL查询的使用极大地提高了开发效率,因为它将数据操作与具体的数据库结构分离。 **1. HQL的基本语法** HQL查询语句结构通常包括以下几个部分:`SELECT`, `FROM`, `WHERE`, `GROUP BY`, `HAVING`, `ORDER BY`。...