oracle能用hql吗,使用HQL查询日期,Oracle报“Invalid number”

如题,Oracle数据库里面有一批记录,现在我想根据其中一个叫:txn_date的字段来查询记录,在Hbm文件中我配置了该HQL,如下所示:

select {job.*} from Newsletter_Message job

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

to_char(:jobDate, 'yyyy-mm-dd hh24:mi')

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

public List getJobByDate(final Date jobDate, final String dateType) {

return (List 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 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) query.list();

}

});

}

不知道各位能否解析一下上面那个报错的原因,谢谢先了!

[该贴被pengpenglin于2008-05-22 16:55修改过]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值