`
hypgr
  • 浏览: 277001 次
社区版块
存档分类
最新评论

No Dialect mapping for JDBC type: 3

阅读更多

我要从数据库中Select sum(price) from talbe获取一些统计数据作为参数传给JasperReport生成报表。为了达到数据本来应该有的精度,所以在数据库中price的数据类型为decimal(20,2)。由于只是简单地从数据库把price,sum出来并不需要进行更进一步的复杂数据处理,所以在实现中我并没有为table写相应该的Pojo和hbm文件。所以在Dao层,我使用Hibernate运行SQL语句将数据检索出来。代码如下:

  BigDecimal totalPrice = (BigDecimal) this .getHibernateTemplate().execute( new  HibernateCallback()  {

        
public  Object doInHibernate(Session session)  throws  HibernateException, SQLException   {
            MonthCheckTable monthCheckTable
= new  MonthCheckTable();
            
            List rs
= session.createSQLQuery( " select sum(price) from table " ).list();
            Number totalPrice 
=  (Number)rs.get( 0 );
            
if (totalPrice == null ) totalPrice = new  BigDecimal( 0.0 );
                        
            
return   new  BigDecimal(totalPrice.toString());
        }
 

    }
);

运行的时候就出现了Maping Excetion,异常栈如下:

org.springframework.orm.hibernate3.HibernateSystemException: No Dialect mapping for JDBC type: 3; nested exception is org.hibernate.MappingException: No Dialect mapping for JDBC type: 3
Caused by: org.hibernate.MappingException: No Dialect mapping 
for JDBC type: 3 


出现这个原因是说服务器端的数据类型并不能和Java的BigDecimal数据类型成功映射。
推想只要在Hibernate里把本对应的数据类型成功映射起来就可以成功执行了。
解决案如下:
1、新建一个MySQLServerDialect extends org.hibernate.dialect.SQLServerDialect 并在里面补充注册新的类型映射。如下:

public class MySQLServerDialect extends SQLServerDialect{
    
public MySQLServerDialect() {
        
super();
        registerHibernateType(Types.DECIMAL, Hibernate.BIG_DECIMAL.getName());
    }

}


2、把Hibernate里的Dialect改成我们第一步新建的新的Dialect

<prop key="hibernate.dialect">com.gdnfha.atcs.common.MySQLServerDialect</prop>


经过这两步这后就可以正常使用SqlQuery拿到Sql Server 2005里的decimal类型了。

在SQLServerDialect里的registerHibernateType函数,更详细的用法请看:

http://www.hibernate.org/hib_docs/v3/api/org/hibernate/dialect/Dialect.html#registerHibernateType(int,%20int,%20java.lang.String)

分享到:
评论
2 楼 haiyangyiba 2012-08-27  

受教了
1 楼 cobo85 2010-03-18  
如果只是对某几个含有decimal字段的sql查询,个人认为,用.addScalar("${别名}", Hibernate.BIG_DECIMAL)直接指定类型比较简单

相关推荐

    人大金仓kingbase 驱动jdbc

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

    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

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

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

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

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

    gbase-jdbc驱动gbase-connector-8.3.81.51和infomix驱动ifxjdbc.jar

    3. **Java JDBC**: Java JDBC是Java平台上的一个核心API,它为各种数据库提供了一个统一的接口。JDBC允许Java开发者编写数据库无关的代码,这意味着相同的代码可以用来连接不同的数据库系统,只要这些系统提供了...

    数据库JDBC连接.txt

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

    kingbaseV8 hibernate jdbc 驱动

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

    hibernate SQLServer2008Dialect

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

    vertx-jdbc:顶点 3.0 JDBC

    Vertx JDBC 执行器 JDBC Executor 为通过 Vertx 3.0 事件总线访问任何符合 JDBC 的数据源提供了一种快速有效的方法。 与 Executor 的所有交互都应该是原子的,并且尽可能“简短而甜蜜”,以尽量减少对共享(JDBC ...

    DmDialect-for-hibernate4.0.zip

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

    国产达梦数据库DM8 JDBC驱动

    国产数据库DM8,jdbc驱动相关资源。达梦8JDBC驱动分为DmJdbcDriver15、DmJdbcDriver16、...达梦8提供不同hibernate和jdk版本的方言包,用户可根据开发环境选择对应的方言包版本,相关方言包驱动在dialect目录下

    神通jdbc驱动.rar

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

    hibernate.properties

    #hibernate.dialect org.hibernate.dialect.H2Dialect #hibernate.connection.driver_class org.h2.Driver #hibernate.connection.username sa #hibernate.connection.password #hibernate.connection.url jdbc:h2:...

    SAP HANA JDCB

    Sap HaNa 数据库链接 jar包。可自定义Maven坐标 添加到私有库 想不要积分,CSDN 最低要求1积分 #mvn install:install-file -Dfile=C:\work\hanajdbclib\ngdbc...#hibernate.dialect=org.hibernate.dialect.SAPDBDialect

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

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

    数据库连接字符串

    class:oracle.jdbc.driver.OracleDriver url:"jdbc:oracle:thin:@localhost:1521:jbitdb","epet","epet" sqlserver: class:com.microsoft.sqlserver.jdbc.SQLServerDriver url:"jdbc:sqlserver://localhost:1433;...

    jdbc_Java8_达梦8jdbc_

    `Hibernate Dialect&JDBC.txt`文件可能包含了关于如何在Hibernate ORM框架中配置达梦的方言和JDBC设置的信息,这对于使用ORM来操作达梦数据库的开发者来说非常重要。 `version.txt`文件通常包含了软件的版本信息,...

    kingbase-jdbc-v8.zip

    3. **kingbasejdbc4-老驱动.jar**:这个文件可能是人大金仓早期版本的JDBC驱动,标记为“老驱动”意味着它可能不包含最新功能或者已知存在一些问题。尽管如此,对于那些无法升级到最新驱动或者需要向后兼容的老项目...

    simplified-dialect-wy-vscode:简化的方言wenyan-lang的vscode插件

    【标题】"simplified-dialect-wy-vscode:简化的方言wenyan-lang的vscode插件" 提供了对wenyan-lang编程语言的便捷支持,特别针对其简化方言进行了优化,旨在提升开发者在Visual Studio Code (VSCode) 编辑器中的编程...

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

    2.2、打开此文件,将“&lt;property name="hibernate.connection.url"&gt;jdbc:sqlite:D:/EGSDatabase.egsdata”一行中的数据库文件("D:/EGSDatabase.egsdata")修改为合适的数据库文件。 注:附件包含了...

Global site tag (gtag.js) - Google Analytics