出处:(hibernate中使用原生的sql语句,报如下错误:)

  MySQL No Dialect mapping for JDBC type: -1

代码:  

List list = session.createSQLQuery(sql).list();

分析:产生些问题的原因是因表中的某个字段类型在hibernate中找不到对应的类型。而导致的,每一种类型都对应一种type:

类型名称 显示长度 数据库类型 JAVA类型 JDBC类型(int) Types属性
VARCHAR L+N VARCHAR java.lang.String 12  Types.VARCHAR
CHAR N CHAR java.lang.String 1  Types.CHAR
BLOB L+N BLOB java.lang.byte[] -4  Types.LONGVARBINARY
TEXT 65535 VARCHAR java.lang.String -1  Types.LONGVARCHAR
INTEGER 4 INTEGER UNSIGNED java.lang.Long 4  Types.INTEGER
TINYINT 3 TINYINT UNSIGNED java.lang.Integer -6  Types.TINYINT
SMALLINT 5 SMALLINT UNSIGNED java.lang.Integer 5  Types.SMALLINT
MEDIUMINT 8 MEDIUMINT UNSIGNED java.lang.Integer 4  Types.INTEGER
BIT 1 BIT java.lang.Boolean -7  Types.BIT
BIGINT 20 BIGINT UNSIGNED java.math.BigInteger -5  Types.BIGINT
FLOAT 4+8 FLOAT java.lang.Float 7  Types.REAL
DOUBLE 22 DOUBLE java.lang.Double 8  Types.DOUBLE
DECIMAL 11 DECIMAL java.math.BigDecimal 3  Types.DECIMAL
BOOLEAN 1 同TINYINT java.lang.Integer -6  Types.TINYINT
DATE 10 DATE java.sql.Date 91  Types.DATE
TIME 8 TIME java.sql.Time 92  Types.TIME
DATETIME 19 DATETIME java.sql.Timestamp 93  Types.TIMESTAMP
TIMESTAMP 19 TIMESTAMP java.sql.Timestamp 93  Types.TIMESTAMP
YEAR 4 YEAR java.sql.Date 91  Types.DATE

解决方法:1

更新hibernate方言(因为最新的hibernate言可能提供了对这种类型的支持)以下是言的汇总:

RDBMS 方言
DB2 org.hibernate.dialect.DB2Dialect
DB2 AS/400 org.hibernate.dialect.DB2400Dialect
DB2 OS390 org.hibernate.dialect.DB2390Dialect
PostgreSQL org.hibernate.dialect.PostgreSQLDialect
MySQL org.hibernate.dialect.MySQLDialect
MySQL with InnoDB org.hibernate.dialect.MySQLInnoDBDialect
MySQL with MyISAM org.hibernate.dialect.MySQLMyISAMDialect
Oracle (any version) org.hibernate.dialect.OracleDialect
Oracle 9i/10g org.hibernate.dialect.Oracle9Dialect
Sybase org.hibernate.dialect.SybaseDialect
Sybase Anywhere org.hibernate.dialect.SybaseAnywhereDialect
Microsoft SQL Server org.hibernate.dialect.SQLServerDialect
SAP DB org.hibernate.dialect.SAPDBDialect
Informix org.hibernate.dialect.InformixDialect
HypersonicSQL org.hibernate.dialect.HSQLDialect
Ingres org.hibernate.dialect.IngresDialect
Progress org.hibernate.dialect.ProgressDialect
Mckoi SQL org.hibernate.dialect.MckoiDialect
Interbase org.hibernate.dialect.InterbaseDialect
Pointbase org.hibernate.dialect.PointbaseDialect
FrontBase org.hibernate.dialect.FrontbaseDialect
Firebird org.hibernate.dialect.FirebirdDialect

以mysql为例:如果以前org.hibernate.dialect.MySQLDialect,那么现在改成:org.hibernate.dialect.MySQLInnoDBDialect

方法2: 如果更新方言还是不行,那可以自己写方言,并配置到hibernate中..

package xm.helper;

import java.sql.Types;
import org.hibernate.Hibernate;
import org.hibernate.dialect.MySQLDialect;
import org.hibernate.dialect.function.StandardSQLFunction; public class XmMySQLDialect extends MySQLDialect { public XmMySQLDialect (){
//把报错的类型注册到hibernate类型的映射中去....
registerHibernateType(-1, Hibernate.STRING.getName());
//也可以把mysql类型注册到,比如hibernate支持longtext
registerColumnType(Types.VARCHAR, "longtext");
}
}

修改hibernate的配置文件:

<property name="hibernate.dialect">xm.helper.XmMySQLDialect</property>

方法3:

使用原生的jdbc,自己包装,不使用createSQLQuery()方法;

public List<Object[]> exeQuery(final String sql) {
final List<Object[]> results = new ArrayList<Object[]>();
sessionFactory.openSession().doWork(new Work() { public void execute(Connection paramConnection) throws SQLException {
java.sql.PreparedStatement psta = paramConnection.prepareStatement(sql);
ResultSet rs = psta.executeQuery();
int columnCount = rs.getMetaData().getColumnCount(); while(rs.next()){
Object[] rows = new Object[columnCount];
for (int j=0; j<columnCount; ++j) {
rows[j] = rs.getObject(j+1);
}
results.add(rows);
}
          rs.close();      
                psta.close();
                paramConnection.close();
}
});
return results;
}

hibernate:MySQL No Dialect mapping for JDBC type: -1的更多相关文章

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

    org.hibernate.MappingException: No Dialect mapping for JDBC type: -9 原因:Hibernate框架的方言(Dialect )没有数据 ...

  2. hibernate报错:org.hibernate.MappingException: No Dialect mapping for JDBC type: -1

    解决方法:自定义一个Hibernate Dialect. package com.yourcompany.util ; import java.sql.Types; import org.hibern ...

  3. springboot org.hibernate.MappingException: No Dialect mapping for JDBC type: -9

    参考 https://www.cnblogs.com/luxd/p/8316243.html https://www.cnblogs.com/s648667069/p/6478559.html @Co ...

  4. 关于No Dialect mapping for JDBC type :-9 hibernate执行原生sql语句问题

    转自博客http://blog.csdn.net/xd195666916/article/details/5419316,同时感谢博主 今天做了个用hibernate直接执行原生sql的查询,报错No ...

  5. No Dialect mapping for JDBC type: -1

    MySQL数据库中有张表的字段是text,查询出来后对应的java类型是String,Dialect设置为org.hibernate.dialect.MySQLDialect 运行的时候报错:No D ...

  6. Hibernate 数据库方言配置;no dialect mapping for jdbc type:-9;生僻字

    最近因为生僻字在界面上显示为?: 主要原因是该字段在数据库中就是varchar类型,显示的就是?:如䶮(yan):现把varchar类型改为nvarchar类型:数据中能够正常显示: 但是Spring ...

  7. Hibernate映射数据库中longtext类型属性时报错No Dialect mapping for JDBC type: -1的解决方案

    出现错误的原因是:hibernate中对于数据库的longtext数据类型不支持. 解决方案: 1.写个类集成方言,然后自己实现对longtext的支持 import java.sql.Types; ...

  8. ORACLE11g:No Dialect mapping for JDBC type: -9解决方案

    问题来源: 某个zhizhang同事不干活 好不容易干了个活 改了个字段长度,从varchar2(50) 改成了nvarchar(100) 结果因为方言问题,程序起不来了 字段类型也改不回来了 nnd ...

  9. (动态改变数据源遇到的问题)ORACLE11g:No Dialect mapping for JDBC type: -9解决方案

    在动态改变数据源时 hibernate配置不能使用Oracle官方的方言(org.hibernate.dialect.Oracle10gDialect) 做法写一个方言扩展类,缺什么类型,添加什么类型 ...

随机推荐

  1. bzoj 1798: [Ahoi2009]Seq 维护序列seq 线段树 区间乘法区间加法 区间求和

    1798: [Ahoi2009]Seq 维护序列seq Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeO ...

  2. 基于RBGD的mapping

    最近学习RGBD的SLAM,收集了两个RGBD的mapping的开源工具包 1.RGBDSlam2 a.安装方法: #准备工作空间 source /opt/ros/indigo/setup.bash ...

  3. 力特ZE398C驱动光盘-USB转RS232-支持Windows 10/Mac

    这个工具是USB1.1的,相对来说比较老,一开始做小白鼠不知道买了USB1.1的,所以我不建议买这个,还有其它的型号,支持USB2.0和USB3.0,不过价格也相对来说比较贵,这个才30块钱左右. 关 ...

  4. STLink download/debug interface for Linux.

    http://arm-utilities.googlecode.com/svn-history/r47/trunk/stlink-download/stlink-download.c /* STLin ...

  5. 让一个view 或者控件不支持拖拽

    让一个view 或者控件不支持拖拽: dragView.userInteractionEnabled = NO;

  6. 4. python 修改字符串实例总结

    4. python 修改字符串实例总结 我们知道python里面字符串是不可原处直接修改的,为了是原来的字符串修改过来,我们有一下方法: 1.分片和合并 >>> a='abcde'  ...

  7. UCOS源码剖析 (一)

    UCOS源码详解 uC/OS-II源码分析(总体思路 一) 首先从main函数开始,下面是uC/OS-II main函数的大致流程: main()      { OSInit(); TaskCreat ...

  8. Nginx和Tomcat负载均衡实现session共享

    以前的项目使用Nginx作为反向代理实现了多个Tomcat的负载均衡,为了实现多个Tomcat之间的session共享,使用了开源的Memcached-Session-Manager框架. 此框架的优 ...

  9. poj 1201 Intervals 解题报告

    Intervals Time Limit: 2000MS   Memory Limit: 65536KB   64bit IO Format: %lld & %llu Submit Statu ...

  10. WhyEngine游戏合集2014贺岁版

    WhyEngine游戏合集2014贺岁版 自去年9月份开始写我的第一个小游戏,到现在为止,共实现了14个小游戏,10个屏保程序,7个DEMO程序.开发环境是VS2008,渲染使用的是D3D,所有代码都 ...