org.hibernate.MappingException: No Dialect mapping for JDBC type: -16

来源:互联网 发布:c语言猜数字游戏程序 编辑:程序博客网 时间:2024/05/21 17:33

 Java代码:

 

Java代码  收藏代码
  1. public List<Object[]> getPlateNumberAndDate(){     
  2.         return getHibernateTemplate().executeFind(new HibernateCallback(){     
  3.             public Object doInHibernate(Session session)     
  4.                     throws HibernateException, SQLException {     
  5.                 Query q = session.createSQLQuery("SELECT top 5 VEHICLE_NUM, ALARM_DATE FROM [dbo].[ALARM_PROCESS] WHERE CHULI_TAG IS NULL");  
  6.                 return q.list();     
  7.             }                
  8.         });     
  9.     }  

 

异常:

 

Java代码  收藏代码
  1. Exception in thread "main" org.springframework.orm.hibernate3.HibernateSystemException: No Dialect mapping for JDBC type: -16; nested exception is org.hibernate.MappingException: No Dialect mapping for JDBC type: -16  
  2.     at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:676)  
  3.     at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)  
  4.     at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:424)  
  5.     at org.springframework.orm.hibernate3.HibernateTemplate.executeFind(HibernateTemplate.java:343)  
  6.     at alpha.gpsf.dao.impl.SpeedingQueryDAOImpl.getPlateNumberAndDate(SpeedingQueryDAOImpl.java:43)  
  7.     at alpha.gpsf.dao.impl.SpeedingQueryDAOImpl.main(SpeedingQueryDAOImpl.java:106)  
  8. Caused by: org.hibernate.MappingException: No Dialect mapping for JDBC type: -16  
  9.     at org.hibernate.dialect.TypeNames.get(TypeNames.java:79)  
  10.     at org.hibernate.dialect.TypeNames.get(TypeNames.java:104)  
  11.     at org.hibernate.dialect.Dialect.getHibernateTypeName(Dialect.java:393)  
  12.     at org.hibernate.loader.custom.CustomLoader$Metadata.getHibernateType(CustomLoader.java:582)  
  13.     at org.hibernate.loader.custom.CustomLoader$ScalarResultColumnProcessor.performDiscovery(CustomLoader.java:508)  
  14.     at org.hibernate.loader.custom.CustomLoader.autoDiscoverTypes(CustomLoader.java:524)  
  15.     at org.hibernate.loader.Loader.getResultSet(Loader.java:1817)  
  16.     at org.hibernate.loader.Loader.doQuery(Loader.java:697)  
  17.     at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)  
  18.     at org.hibernate.loader.Loader.doList(Loader.java:2228)  
  19.     at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2125)  
  20.     at org.hibernate.loader.Loader.list(Loader.java:2120)  
  21.     at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:312)  
  22.     at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1722)  
  23.     at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:165)  
  24.     at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:175)  
  25.     at alpha.gpsf.dao.impl.SpeedingQueryDAOImpl$2.doInHibernate(SpeedingQueryDAOImpl.java:48)  
  26.     at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:419)  
  27.     ... 3 more  

 

关键异常:

 

Java代码  收藏代码
  1. org.hibernate.MappingException: No Dialect mapping for JDBC type: -16  

 

原因:hibernate中native sql对于数据库的某些数据类型不支持,数据类型不能成功映射。

 

解决办法:

 

在取数据的时候用下CONVERT函数,把类型转成varchar就行了,测试得知varchar类型没问题

 

Java代码  收藏代码
  1. Query q = session.createSQLQuery("SELECT top 5 CONVERT(varchar(25),VEHICLE_NUM), CONVERT(varchar(25),ALARM_DATE,20) FROM [dbo].[ALARM_PROCESS] WHERE CHULI_TAG IS NULL");  

 

 

原创粉丝点击