出处:(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. Dijkstra_Liu博客100篇祭

    创建博客,有两年三个月了.今天,写了100篇随笔了,又正值我的15岁生日,还是值得纪念一下. 两年过去了,我从学习:队列.栈.模拟.背包慢慢地变成了:Tarjan.线段树.树剖. 我也从一个初一的天真 ...

  2. INFORMATION_SCHEMA.COLUMNS-表的字段信息

    当前数据库中当前用户可以访问的每一个列在该视图中占一行.INFORMATION_SCHEMA.COLUMNS 视图以 sysobjects.spt_data type_info.systypes.sy ...

  3. .net正则提取手机号码,并替换带有手机号码的a标签

    //用正则查找字符串中的手机号码,最后替换成带a标签的可打电话的字符串 var str = "收件人:江苏省苏州市工业园区屌丝大叔收,电话:18688888888"; var re ...

  4. MySQL Proxy 实现MySQLDB 读写分离

    一.简述 MySQL Proxy是一个处于你的client端和MySQL server端之间的简单程序,它可以监测.分析或改变它们的通信.它使用灵活,没有限制,常见的用途包括:负载平衡,故障.查询分析 ...

  5. PHPExcel 导出2003和2007的excel文档实例

    require_once 'common/excel/PHPExcel.php'; require_once 'common/excel/phpExcel/Writer/Excel2007.php'; ...

  6. 淘宝--印风 专注于MySQL内核代码

    http://blog.csdn.net/zhaiwx1987/article/details/6113472?utm_source=jiancool

  7. MEF(Managed Extensibility Framework)有选择性地使用扩展组件

    在"MEF(Managed Extensibility Framework)使用全部扩展组件"中,客户端应用程序调用了所有的扩展组件,而且如果有新的扩展组件加入,必须先关闭程序,再 ...

  8. 页面中checkbox返回的是一个数组,如何对数组进行操作

    1. 仅仅利用javascript进行操作: //html代码如下: <form action="#" method="POST" onsubmit=&q ...

  9. Mantis集成 LDAP 认证

    mantis的用户认证函数Authentication中相关有 $g_login_method MD5 LDAP PLAIN CRYPT CRYPT_FULL_SALT BASIC_AUTH Some ...

  10. Java-JDBC调用批处理、存储过程、事务

    一.使用Batch批量处理数据库  当需要向数据库发送一批SQL语句执行时,应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效率.; 1.实现批处理有两种方式,第一种方式: S ...