当前位置: 代码迷 >> J2EE >> hibernate返回值的时候抛出的错误java.lang.String cannot be cast to java.util.Date
  详细解决方案

hibernate返回值的时候抛出的错误java.lang.String cannot be cast to java.util.Date

热度:123   发布时间:2016-04-22 01:31:05.0
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去掉看看,映射还有没有问题
  相关解决方案