`

mysql varchar长度过大引起hibernate原生态SQL错误:No Dialect mapping for JDBC type: -1错误的解决方法

阅读更多

先把异常抛出来:

Hibernate: select sum(num) from ( select count(*) as num from cm_facility_wrong as fw left outer join cm_conf as cf on fw.faw_room_id=cf.conf_id left outer join cm_facility as f on fw.fa_id=f.fa_id where 1=1 and fw.faw_room_type=0 union all select count(*) as num from cm_facility_wrong as fw left outer join cm_classroom as cr on fw.faw_room_id=cr.cr_id left outer join cm_facility as f on fw.fa_id=f.fa_id where 1=1 and fw.faw_room_type=1 ) as t


Hibernate: select fw.faw_id,fw.faw_room_id,fw.faw_room_type, fw.fa_id,fw.faw_type,fw.faw_desc,fw.faw_time,fw.faw_man, fw.faw_r_company,fw.faw_man,fw.faw_phone,fw.faw_r_time, fw.faw_memo,fw.faw_state, cf.conf_name,f.fa_no,f.fa_name from cm_facility_wrong as fw   left outer join cm_conf as cf on fw.faw_room_id=cf.conf_id left outer join cm_facility as f on fw.fa_id=f.fa_id where 1=1 and fw.faw_room_type=0  union all select fw.faw_id,fw.faw_room_id,fw.faw_room_type, fw.fa_id,fw.faw_type,fw.faw_desc,fw.faw_time,fw.faw_man, fw.faw_r_company,fw.faw_man,fw.faw_phone,fw.faw_r_time, fw.faw_memo,fw.faw_state, cr.cr_name,f.fa_no,f.fa_name from cm_facility_wrong as fw left outer join cm_classroom as cr on fw.faw_room_id=cr.cr_id left outer join cm_facility as f on fw.fa_id=f.fa_id where 1=1 and fw.faw_room_type=1 limit ?
WARN - Unhandled Exception thrown: class org.hibernate.MappingException
2009-6-24 20:40:15 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet action threw exception
org.hibernate.MappingException: No Dialect mapping for JDBC type: -1
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:370)

at org.hibernate.loader.custom.CustomLoader$Metadata.getHibernateType(CustomLoader.java:559)
at org.hibernate.loader.custom.CustomLoader$ScalarResultColumnProcessor.performDiscovery(CustomLoader.java:485)
at org.hibernate.loader.custom.CustomLoader.autoDiscoverTypes(CustomLoader.java:501)
at org.hibernate.loader.Loader.getResultSet(Loader.java:1796)
at org.hibernate.loader.Loader.doQuery(Loader.java:674)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
at org.hibernate.loader.Loader.doList(Loader.java:2220)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
at org.hibernate.loader.Loader.list(Loader.java:2099)
at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:289)
at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1695)
at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:142)
at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:152)
at net.bolue.other.dao.impl.CmFacilityWrongDAOImpl.findAll(CmFacilityWrongDAOImpl.java:93)
at net.bolue.other.service.impl.CmFacilityWrongServiceImpl.findAll(CmFacilityWrongServiceImpl.java:37)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy33.findAll(Unknown Source)
at net.bolue.other.action.CmFacilityWrongAction.findByAll(CmFacilityWrongAction.java:212)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:270)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
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:191)
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:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:595)

由于此查询语句需要使用union语句,因此必须要用原生态的SQL来写.在表中有两个字段类型为varchar,长度我都设为1000.

结果做这个查询时就出了问题,SQL语句hibernate已经运行出来了,说明SQL语句写的没有问题,后来google了半天,在中文google里找了找,也有写报类似错误的,但是都没有出现我这个type: -1错误,于是就google英文页面,找到了一篇介绍这个解决办法的文章:http://opensource.atlassian.com/projects/hibernate/browse/HHH-1483,还是英文google资料多而且准啊.

出现这个原因是说hibernate中mysql的varchar类型与数据库中的varchar类型不能对应起来,因此只要在Hibernate里把对应的数据类型成功映射起来就可以成功执行了。

解决方法如下:

import java.sql.Types;

import org.hibernate.Hibernate;

public class MySQL5Dialect extends org.hibernate.dialect.MySQL5Dialect {
public MySQL5Dialect() {
   super();
   // register additional hibernate types for default use in scalar
   // sqlquery type auto detection
   registerHibernateType(Types.LONGVARCHAR, Hibernate.TEXT.getName());
}
}

新建一个MySQL5Dialect类,然后在hibernate配置文件或spring配置文件中将hibernate.dialect改成刚才写的那个就可以了.如

<prop key="hibernate.dialect">xxx.util.MySQL5Dialect</prop>

总结:当在hibernate中使用原生态的SQL时,如果在数据库varchar的字段的长度设为过大(比如说为1000)的话,那么就需要自己补充注册新的类型映射,不光是varchar类型,其它类型字段设置过大也会有这样的问题,比如说decimal类型等等,同样也是按这种方法来解决.

hibernate有时还真有点搞人的.

http://hi.baidu.com/sunjsp/blog/item/fa7b57efe4a7b8e6ce1b3eb1.html

分享到:
评论

相关推荐

    Mysql中varchar长度设置方法

    主要介绍了Mysql中varchar长度设置方法的相关资料,本文还给大家带来了valar类型的变化及char()和varchar()的区别介绍,非常不错,具有参考借鉴价值,需要的朋友可以参考下

    MySQL动态修改varchar长度的方法

    主要介绍了MySQL动态修改varchar长度的方法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下

    mysql-connector-java-commercial-5.1.30-bin.jar

    在C:\Program Files\Java目录下建立mysqlforjdbc子目录,进入该目录将mysql-connector-java-5.1.30-bin.jar到该目录下 进入C:\Program Files\Java\jdk1.7.0_04\lib目录将mysql-connector-java-5.1.30-bin-g.jar拷贝...

    mysql+jdbc+jsp+Hibernate3.2+tomcattomcat5.028成功测试

    mysql,jdbc,Hibernate,tomcat [mysql+jdbc+jsp+Hibernate3.2+tomcattomcat5.028成功测试-简单] &lt;br&gt; 1 .数据库设计:库mydb 表events &lt;br&gt;EVENT_ID BIGINT(20) NOT NULL AUTOINC EVENT_DATE DATETIME...

    Mysql varchar大小长度问题介绍

    如果被 varchar 超过上述的 b 规则,被强转成 text 类型,则每个字段占用定义长度为 11 字节,当然这已经不是 varchar 了

    MYSQL,SQLSERVER,ORACLE常用的函数

    SQL&gt; select acos(-1) from dual; ACOS(-1) --------- 3.1415927 17.ASIN 给出反正弦的值 SQL&gt; select asin(0.5) from dual; ASIN(0.5) --------- .52359878 18.ATAN 返回一个数字的反正切值 SQL&gt; ...

    MySql版的中国省市县数据库。SQL文件

    /* Navicat MySQL Data Transfer Source Server : localhost Source Server Version : 50137 Source Host : localhost:3306 Source Database : chronic manage Target Server Type : MYSQL Target Server Version : ...

    MySQL 入门学习 ——基础教程

    MySQL入门学习(1)。  MySQL入门学习(1) · 安装篇 PHP+MySQL+Linux目前已逐渐成为小型web服务器的一种经典组合。在indows环境下构筑和调试MySQL数据库是许多网站开发者的一种首选。本人在Windows98环境下...

    Hibernate1

    对 Hibernate 初体验 1.新建一个java工程,工程名为Hiberante1 2.导入相应的jar包 1)hibernate需要导入这些包 2)因为我们需要操作数据库所以要导入数据库的包,我用的mysql数据库 3.创建数据库以及表 ...

    SSH_spring4.2_hibernate5完整示例代码

    hibernate-release-5.0.2.Final spring-framework-4.2.1.RELEASE 数据库是 mysql 数据库的连接符 jdbc:mysql://localhost:3306/test_db?useUnicode=true&amp;characterEncoding=UTF-8 放在jdbc.properties 文件中 ...

    maven+springMVC+mybatis+easyUI管理用户增删改查

    SQL脚本 /* Navicat MySQL Data Transfer Source Server : MySQL Source Server Version : 50022 Source Host : 127.0.0.1:3306 Source Database : zhaochao Target Server Type : MYSQL Target Server Version :...

    T-SQL电子书包含PPT及学习笔记、课后作业 非常好的sql学习资料

    T-SQL中级教程,包括PPT、学习笔记及课后作业,非常经典的教程 --建库之前先建路径的代码 exec xp_cmdshell'mkdir d:\mydata', --也可以用exec xp_cmdshell'md d:\mydata' no_output exec xp_cmdshell'rd d:\...

    hivedriver:hive-jdbc修改,在使用本jdbc时会记录相应的sql语句到mysql中。便于后期的sql统计优化

    hive-jdbc修改,在使用本jdbc时会记录相应的sql语句到mysql中。便于后期的sql统计优化。 原始版本: org.apache.hive hive-jdbc 0.13.1-cdh5.2.0 驱动名称:com.udps.hive.jdbc.HiveDriver mysql中表的建表语句: ...

    jsp框架相册应用系统

    用固定框架来,和数据库来做的,-- MySQL dump 9.09 -- -- Host: localhost Database: ch3 -- ------------------------------------------------------ -- Server version 4.0.16-nt -- -- Table structure for ...

    jdbc基础和参考

    jdbc: 1.数据库连接的方式: ODBC:开放式数据库连接。 C语言实现的,提供语言和(基于SQL的)数据库进行交互的“一致性”的接口 JDBC:java版本的ODBC JDBC连接数据库的步骤: 1.注册驱动(加载驱动): 注册...

    中国 省市区三级级联菜单 数据库Mysql修正版本

    附件名称:gk_diqu.sql 附件用途:制作省市区三级级联菜单数据来源 简单介绍:文件gk_diqu.sql内含数据库表 gk_diqu。 数据结构: mysql&gt; desc gk_diqu; +-------+----------------------+------+-----+---------+-...

    hibernate与servlet连接数据库

    Target Server Type : MYSQL Target Server Version : 50018 File Encoding : 65001 Date: 2013-02-27 21:23:33 */ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for `user` -...

    jsp+servlet+javabean+jdbc+mysql实现增删改查和分页功能

    1.目的:总结JDBC,和Servlet JSP结合到一起。 2.开发中的一些小技巧。 3.客户管理平台功能 * 添加客户 * 查询所有的客户的信息 * 修改客户信息 * 删除客户信息 * 按条件查询 * 分页查询数据 4.准备环境 5....

Global site tag (gtag.js) - Google Analytics