日期:2014-05-19  浏览次数:20699 次

hibernate返回值的时候抛出的异常java.lang.String cannot be cast to java.util.Date
这个异常搞的我摸不清头脑了
java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Date
at org.hibernate.type.DateType.toString(DateType.java:101)
at org.hibernate.type.NullableType.nullSafeToString(NullableType.java:117)
at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:158)
at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:136)
at org.hibernate.param.NamedParameterSpecification.bind(NamedParameterSpecification.java:67)
at org.hibernate.loader.hql.QueryLoader.bindParameterValues(QueryLoader.java:514)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1593)
at org.hibernate.loader.Loader.doQuery(Loader.java:696)

说是类型转换异常 我数据库里面存的是日期类型的数据timestamp 
  `CREATE_TIME` timestamp NOT NULL DEFAULT '1971-07-01 00:00:00' COMMENT '创建时间',
  `TO_EXAMINE_TIME` timestamp NOT NULL DEFAULT '1971-07-01 00:00:00' COMMENT '审核时间',
  `START_TIME` timestamp NOT NULL DEFAULT '1971-07-01 00:00:00' COMMENT '广告开始播放时间',
  `END_TIME` timestamp NOT NULL DEFAULT '1971-07-01 00:00:00' COMMENT '广告结束播放时间',

我实体类里面用java.unitl.date接收怎么就会出问题呢?

Java code

    public List<T> findEntity(final String hql,
             final Map<String,Object> parmap, final boolean cache)
            throws Exception {
        return (List<T>) getHibernateTemplate().execute(
                new HibernateCallback() {

                    public Object doInHibernate(Session session)
                            throws HibernateException, SQLException {
                        Query query = session.createQuery(hql);
                            if(parmap!=null){
                                Iterator iter=parmap.entrySet().iterator();
                                while(iter.hasNext()){
                                    Map.Entry e=(Map.Entry)iter.next();
                                    query.setParameter(e.getKey().toString(), e.getValue());
                                }
                        }
                        //写入缓存
                        query.setCacheable(cache);
                        return query.list();
                    }

                });
    }



------解决方案--------------------
你是绑定参数时将string传给了date,检查一下你的parmap里的值的类型
------解决方案--------------------
在hibernate中timestamp和java.util.Date之间映射好像是有点问题
你把timestamp改为date即不会有问题了
你也可以试试把timestamp的default去掉看看,映射还有没有问题