`

【转】No Dialect mapping for JDBC type 错误分析

阅读更多

当在hibernate中运用原始的sql语句进行操作的的时候,常常会报错,错误很多都是关于
No Dialect mapping for JDBC type类型的错误,经过分析和查找,问题常常发生在几个地方
1、错误的配置了hibernate的方言
2、就是你的数据库中的字段和java里面的类型不匹配的问题
具体信息如:
eg:
Session session = HibernateSessionFactory.getSession();
String sql = "SELECT Daymarketinfo.* FROM (select * from daymarketinfo d order by market_time desc ) as Daymarketinfo group by contract_id;";
Query query = session.createSQLQuery(sql);
List<?> list = query.list();//错误出现位置
List<JsonData> jsonList = new ArrayList<JsonData>();
for (Object obj : list) {
  Object[] arr = (Object[])obj;
  JsonData oJson = new JsonData();
  oJson.setId((Integer)arr[0]);
  /*
    对arr数组取出一个个取出相应的数据就可以了,在这里就不多赘述
  */
jsonList.add(dk);
}
request.setAttribute("jsonList", jsonList);
return mapping.findForward("success");

错误信息如下:

org.hibernate.MappingException: No Dialect mapping for JDBC type: 7
at org.hibernate.dialect.TypeNames.get(TypeNames.java:56)
at org.hibernate.dialect.TypeNames.get(TypeNames.java:81)
at org.hibernate.dialect.Dialect.getHibernateTypeName(Dialect.java:192)
at org.hibernate.loader.custom.CustomLoader.getHibernateType(CustomLoader.java:161)
at org.hibernate.loader.custom.CustomLoader.autoDiscoverTypes(CustomLoader.java:131)
at org.hibernate.loader.Loader.getResultSet(Loader.java:1678)
at org.hibernate.loader.Loader.doQuery(Loader.java:662)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
at org.hibernate.loader.Loader.doList(Loader.java:2145)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2029)
at org.hibernate.loader.Loader.list(Loader.java:2024)
at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:111)
at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1655)
at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:142)
at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:164)
at com.futures.action.manage.DaymarketinfoAction.execute(DaymarketinfoAction.java:57)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:105)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)


解决方法为:通过查询hibernate的源码,找到问题的根本所在,就是hibernate中不支持对应的数据类型,具体数据类型的值,请查看下表


查看 java.sql.Types 类,可以找到对应类型,调整相应的数据库里的类型,或者其他支持这个类型的方言。

 

为让hibernate知道此类型。

必须一下做法:

package com.quduan;

import java.sql.Types;
import org.hibernate.Hibernate;
import org.hibernate.dialect.MySQLDialect;

public class ZJCMySQLDialect extends MySQLDialect{

public ZJCMySQLDialect () {
super();
registerHibernateType(Types.DECIMAL, Hibernate.BIG_DECIMAL.getName());
registerHibernateType(-1, Hibernate.STRING.getName());
}

}

修改:

<prop key="hibernate.dialect">
com.quduan.ZJCMySQLDialect
</prop>

这样就可以支持BigDecimal类型了。

 

转自:http://blog.sina.com.cn/s/blog_6b30a46b01011yw6.html

           http://andinker.iteye.com/blog/789352

分享到:
评论

相关推荐

    DM达梦数据库jdbc-jar包dialect方言jar包

    "DM达梦数据库jdbc-jar包dialect方言jar包"就是包含了针对达梦数据库的方言实现,它使得这些框架可以正确处理DM达梦数据库特有的SQL语法和存储过程,从而提高代码的可移植性和兼容性。 在使用DM达梦数据库jdbc-jar...

    Java连接达梦数据库驱动dm_jdbc

    Java连接达梦数据库驱动dm_jdbc: dm_jdbc\com.dameng.floader.jar dm_jdbc\com.dameng.impexp.jar dm_jdbc\Dm7Dictionary.jar dm_jdbc\Dm7JdbcDriver14....dm_jdbc\Hibernate Dialect&JDBC;.txt dm_jdbc\version.txt

    人大金仓kingbase 驱动jdbc

    JDBC驱动主要有四种类型:Type 1、Type 2、Type 3和Type 4。人大金仓Kingbase JDBC驱动通常属于Type 4,即纯Java实现的网络驱动,它提供了一个完全基于Java的数据库连接,无需依赖于特定的本地库,具有良好的跨平台...

    达梦数7据库j驱动包及方言包,maven依赖jar包,DM达梦数据库jdbc-jar包dialect方言jar包

    "dialect方言jar包"则针对特定数据库的SQL语法特性,因为不同数据库系统的SQL语法略有差异。在使用ORM(Object-Relational Mapping)框架如Hibernate时,方言的作用尤为重要。Hibernate方言是Hibernate框架内一个...

    达梦数据库JDBC驱动包合集包含MYSQL驱动包

    首先,我们需要了解JDBC(Java Database Connectivity),它是Java语言连接数据库的标准接口,由Oracle公司开发,使得Java开发者能够通过标准API与各种类型的数据库进行通信。 达梦数据库是一款国产的关系型数据库...

    达梦数据库jdbc包

    3. **Hibernate Dialect&JDBC.txt**:Hibernate是一个流行的Java ORM(对象关系映射)框架,它允许开发者用面向对象的方式来操作数据库。该文本文件可能包含了关于如何配置Hibernate以适应达梦数据库的方言(Dialect...

    DmDialect-for-hibernate4.0.zip

    本篇将详细介绍标题为"DmDialect-for-hibernate4.0.zip"的压缩包文件及其包含的两个重要组件:Dm7JdbcDriver17.jar和DmDialect-for-hibernate4.0.jar,以及它们在SpringBoot项目中的作用。 首先,SpringBoot是一个...

    jdbc_Java8_达梦8jdbc_

    标题中的"jdbc_Java8_达梦8jdbc_"暗示了我们将在Java 8环境中讨论如何使用达梦(DM)数据库的JDBC驱动程序。达梦是中国的一款关系型数据库管理系统,广泛应用于政府、企业等场景。这里我们将深入探讨如何在Java 8中...

    SQLAlchemy Dialect for SAP HANA.zip

    SQLAlchemy Dialect for SAP HANA 就是 SQLAlchemy 为 SAP HANA 数据库提供的一种方言,使得开发者能够利用 SQLAlchemy 的强大功能来与 SAP HANA 进行交互。 1. **SQLAlchemy Dialects**: SQLAlchemy 的方言系统...

    达梦数据库v8.1jdbc驱动.zip

    【Hibernate Dialect&JDBC.txt】文件可能记录了关于Hibernate框架与达梦数据库交互的方言(Dialect)设置和JDBC配置信息。Hibernate是一个流行的ORM(Object-Relational Mapping)框架,它允许开发者用面向对象的...

    简单了解mysql方言dialect

    数据库方言(Dialect)是指在遵循标准SQL语法的基础上,各个数据库管理系统(如MySQL、Oracle、MSSQL等)根据自身的特性和需求所扩展的一套特有的语法和功能。这些方言使得不同的数据库系统在处理特定任务时可能需要...

    神通jdbc驱动.rar

    神通数据库的jdbc驱动jar包,从自己安装的神通数据库中复制出来,亲测可以使用,分享给需要的人 jdbc.driverClassName=com.oscar.Driver jdbc.url=jdbc:oscar://ip:端口/数据库名称 hibernate.dialect=...

    数据库JDBC连接.txt

    ### 数据库JDBC连接知识点详解 #### 一、概述 JDBC(Java Database Connectivity)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。它由一组用Java语言...

    dm达梦jdbc驱动下载DmJdbcDriver16、DmJdbcDriver17、DmJdbcDriver18

    达梦8JDBC驱动分为DmJdbcDriver16、DmJdbcDriver17、DmJdbcDriver18,分别对应Jdk1.6、Jdk1.7、Jdk1.8; 达梦8提供不同hibernate和jdk版本的方言包,用户可根据开发环境选择对应的方言包版本,相关方言包驱动在...

    达梦数据库方言 (dialect) jar包(史上最全)

    达梦数据库方言 (dialect...包含hibernate各版本,DmHibernateSpatial-1.0.jar, DmHibernateSpatial-1.1.jar,DmDialect-for-hibernate5.3.jar ... DmDictionary.jar,dmjooq-dialect-3.12.3.jar,gt-dameng-2.15.jar...

    kingbaseV8 hibernate jdbc 驱动

    另外,还有一些以`dialect`结尾的jar文件,如`hibernate-5.0.12.Finaldialect.jar`,这些通常是针对特定数据库的方言(Dialect)实现,用于告诉Hibernate如何正确地与特定类型的数据库进行交互。KingbaseV8的方言...

    达梦数据库JDBC驱动包

    达梦7JDBC驱动分为Dm7JdbcDriver14、Dm7JdbcDriver15、Dm7JdbcDriver16,分别对应Jdk1.4、Jdk1.5、Jdk1.6; 达梦7Hibernate方言包分为Dm7Dialect314、Dm7Dialect15、Dm7Dialect16,分别对应Jdk1.4、Jdk1.5、Jdk1.6;

    达梦jdbc驱动

    Java连接达梦数据库驱动dm_jdbc: dm_jdbc\...dm_jdbc\Hibernate Dialect&JDBC;.txt dm_jdbc\version.txt 网上的dm的jdbc驱动分太贵了,完全脱离了分享宗旨。我只收1分,评论后,分好像还能挣回去

    国产神通数据库用到的jdbc驱动包、集成Hibernate用到的jar包

    提到Hibernate,就不得不提其方言(Dialect)的概念。方言是Hibernate为了适应不同的数据库而设计的一种抽象层,它负责将Hibernate的标准SQL语句转化为具体数据库能理解的SQL语法。在描述中提到了三个不同版本的...

Global site tag (gtag.js) - Google Analytics