`
jackytang520
  • 浏览: 138240 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

自定义Hibernate Dialect解决createSQLQuery时的decimal,long

    博客分类:
  • Java
阅读更多
org.hibernate.MappingException: No Dialect mapping for JDBC type: 3

仔细查看,发现问题在于数据类型.到网上查,发现hibernate在执行List result = session.createSQLQuery(sql).list()的时候,当SQL语句中遇到的decimal,long等类型的字段时,就出现上面的错误.而且从错误信息中可以发现:出错的是Dialect.

解决办法:

错误知道以后,我就到网上找解决办法.看来遇到这类问题的人太多了,网上到处都有人贴这个问题.我看了几篇,发现有个解决办法,就是自定义Hibernate Dialect.虽然所用数据库不同(我用的数据库是DB2),我觉得大同小异,就照着做了:

首先建一个类,继承org.hibernate.dialect.DB2Dialect,该类的内容如下:

import java.sql.Types;

import org.hibernate.Hibernate;
import org.hibernate.dialect.DB2Dialect;

public class PmDb2Dialect extends DB2Dialect {
    public PmDb2Dialect() {
        super();
        registerHibernateTyp(Types.DECIMAL,Hibernate.BIG_DECIMAL.getName());
    }
}

第二步,就是修改hibernate的配置文件hibernate.cfg.xml:

将:
    <property name="hibernate.dialect">
        org.hibernate.dialect.DB2Dialect
    </property>

改为:
    <property name="hibernate.dialect">
        com.yonder.pm.common.PmDb2Dialect
    </property>
分享到:
评论
4 楼 jackytang520 2009-03-25  
wbm-000001 写道

我明白了,3和2004都是代表java.sql.Types中的数据类型常量,2004是BLOB。 但是我按照这样修改: package com.asiasoft.atpass.hibernate.dialect; import java.sql.Types; import org.hibernate.Hibernate; import org.hibernate.dialect.InformixDialect; public class MyInformixDialect extends InformixDialect{ public MyInformixDialect(){ super(); registerHibernateType(Types.BLOB, Hibernate.BLOB.getName()); //registerHibernateType(2004, Hibernate.BLOB.getName()); } } 并修改了Hibernate的配置,还是出现同样的错误,不知为什么?


抱歉,因为我没有用过Informix数据库,这个问题也是因为我们做项目时使用DB2时碰到的,这个也是从网上找的一些资料我整理了一下.
3 楼 wbm-000001 2009-03-24  
我明白了,3和2004都是代表java.sql.Types中的数据类型常量,2004是BLOB。
但是我按照这样修改:
package com.asiasoft.atpass.hibernate.dialect;

import java.sql.Types;

import org.hibernate.Hibernate;
import org.hibernate.dialect.InformixDialect;


public class MyInformixDialect extends InformixDialect{

public MyInformixDialect(){
super();
registerHibernateType(Types.BLOB, Hibernate.BLOB.getName());
//registerHibernateType(2004, Hibernate.BLOB.getName());
}
}
并修改了Hibernate的配置,还是出现同样的错误,不知为什么?
2 楼 wbm-000001 2009-03-24  
呵呵,我用informix数据库,也出现类似问题,错误信息:org.hibernate.MappingException: No Dialect mapping for JDBC type: 2004
不知道3和2004分别代表什么意思?
1 楼 yyy851124 2008-09-05  
太高兴看到了。 出这样的问题.   我们这些菜鸟  是没办法解决的.
  能交个朋友吗?

相关推荐

    hibernate3.6.0dialect.jar

    hibernate3.6.0dialect.jar

    hibernate3dialect

    hibernate3dialect

    达梦Hibernate方言2.0至4.0

    Hibernate方言(Dialect)是Hibernate框架中的一个关键概念,它是Hibernate与特定数据库之间通信的桥梁。方言定义了如何将Hibernate的SQL语句转换为特定数据库所理解的SQL,包括列类型、约束、SQL语法等。例如,达梦...

    Hibernate4.0以上 SQLiteDialect.java

    hibernate 4以上Hibernate.INTEGER之类的不能使用了,之前使用的SQLiteDialect.java编译不过去了,这个可以。

    hibernate SQLServer2008Dialect

    SQLServer2008Dialect 优化了原来的分页查询数据方法以及在生成SQL时表后增加了with(nolock)

    GBase_Hibernate3.2.3_GA-Dialect_8.3.81.51_build50.1.jar

    南大通用GBase数据库GBase_Hibernate3.2.3_GA-Dialect_8.3.81.51_build50.1.jar

    kingbasehibernate3.3.2dialect.jar

    hibernate下的kingbase的jar文件,需要的同学自行下载

    Hibernate连接SQLite配置说明和方言代码

    Hibernate连接SQLite配置步骤: 1、添加SQLite库: 1.1、将两个jar包:com.zy.hibernate.dialect.SQLiteDialect.jar、sqlite-jdbc-3.7.2.jar拷贝到“\WEB-INF\lib”文件夹下; 2、配置hibernate: 2.1、将...

    达梦 Hibernate 方言 2.0 至 4.0

    而方言(Dialect)则是Hibernate中用于适配不同数据库系统的类,它定义了SQL语法的特定实现,使得Hibernate可以正确地在不同的数据库上执行SQL语句。 达梦数据库作为国内自主研发的高性能、高安全性的数据库产品,...

    Hibernate不同数据库的连接及SQL方言

    Hibernate提供了多种SQL方言,例如org.hibernate.dialect.OracleDialect、org.hibernate.dialect.MySQLDialect、org.hibernate.dialect.SQLServerDialect等。我们可以在配置文件中使用元素来设置SQL方言,例如: ...

    瀚高数据库hibernate方言 hgdb-hibernate-dialect

    方言(Dialect)是Hibernate中的一个关键组件,它定义了如何与特定的数据库管理系统(DBMS)进行通信的规则和语法。 瀚高数据库,全称为HighGo Database,是一款源自中国的高性能、安全可靠的开源数据库系统,适用于...

    DmDialect-for-hibernate4.0.zip

    在SpringBoot集成Hibernate时,通过配置`spring.jpa.hibernate.dialect`属性,指定使用DmDialect,就能让Hibernate知道如何与达梦数据库进行有效通信。这样,开发人员就可以利用Hibernate的高级特性,如懒加载、事务...

    达梦数据库hibernate方言包

    DmDialect-for-hibernate2.0、DmDialect-for-hibernate2.1、DmDialect-for-hibernate3.0、DmDialect-for-hibernate3.1、DmDialect-for-hibernate3.6、DmDialect-for-hibernate4.0、DmDialect-for-hibernate5.0、...

    达梦数据库java驱动包、hibernate方言包

    jar包在dialect目录下: 1. DmDialect-for-hibernate2.0.jar 对应 Jdk1.4及以上, hibernate2.0 环境 2. DmDialect-for-hibernate2.1.jar 对应 Jdk1.4及以上, hibernate2.1 -- 2.X 环境 3. DmDialect-for-hibernate3.0...

    hibernate-4.3.11finaldialect.jar

    Hibernate人大金仓jar包

    Hibernate 配置各种数据库

    hibernate.dialect = org.hibernate.dialect.MySQLDialect hibernate.connection.driver_class = com.mysql.jdbc.Driver hibernate.connection.url = jdbc:mysql:///test hibernate.connection.username = gavin ...

    hibernate中所有数据库方言

    在探讨Hibernate中所有数据库方言之前,我们先简要回顾一下Hibernate框架本身。Hibernate是一个开源的对象关系映射(ORM)框架,用于Java应用与各种关系型数据库进行交互。它提供了强大的功能,如对象持久化、查询...

    kingbaseV8 hibernate jdbc 驱动

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

    hibernate5相关jar包

    `hibernate-dialect.jar`包含不同数据库的方言类,使得Hibernate可以生成适合特定数据库的SQL语句。 5. 第三方库:如`javassist.jar`, `dom4j.jar`, `slf4j-api.jar`, `slf4j-log4j12.jar`等 - `javassist.jar`:...

Global site tag (gtag.js) - Google Analytics