今天在用Hibernate通过原生SQL和ResultTransformer映射时,出现数据类型不匹配的错误。但是通过Entity映射,没有问题。在网上找了好多答案,终于解决了。

  核心代码:

String sql = "select currencies.code, attr1, attrN from currencies, table1,tableN";
SQLQuery sqlQuery = session.createSQLQuery(sql);
sqlQuery.setResultTransformer( Transformers.aliasToBean(SomeClassName.class));

  网上方法总结如下:

  1、利用数据库CAST函数,select cast( currencies.code as varchar),这个办法对于MYSQL无效,因为MYSQL的cast方法无法完成CHAR到VARCHAR的转换;

  2、继承MYSQL的dialect,在Hibernate中将CHAR(N)都注册为String类型;

public class FixedMySQL5InnoDBDialect extends MySQL5InnoDBDialect{
protected void registerVarcharTypes() {
super.registerVarcharTypes();
registerColumnType(Types.CHAR, 255, "char($l)");
registerHibernateType( Types.CHAR, Hibernate.STRING.getName() );
}
}

  3、如果只select一个属性的话,可以使用SQLQuery的addScalar("code",HIbernate.STRING);但是多了的话,就需要将所有属性全部以这种方式告诉Hibernate如果映射。多的话可以考虑第二种方法。

Hibernate原生SQL映射MySQL的CHAR(n)类型到String时出错的更多相关文章

  1. Hibernate原生SQL查询多表关联,SQL语句要注意的问题

    Hibernate原生SQL查询多表关联,SQL语句要注意的问题 @for&ever 2009-9-4 系统环境: MySQL5.1 Hibernate3.3 有如下的假定: 实体类 Ques ...

  2. 使用hibernate原生sql查询,结果集全为1的问题解决

    问题如下: String sqlTest ="select summary,summaryno from F_Summary"; List<Map<Object, Ob ...

  3. 【Hibernate】hibernate原生sql利用transformers返回多表自定义类型对象

    大致结构: Person(人): id,name,age,bookId Book(书):id,bookName Author(作者):id,authorName,bookId 一个人 只有 一本书,一 ...

  4. 7、provider: SQL 网络接口, error: 26 - 定位指定的服务器/实例时出错

    在建立与服务器的连接时出错.在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败.(provider: SQL 网络接口, error ...

  5. Hibernate原生SQL查询

    最近在做一个较为复杂的查询,hibernate基本的查询不能满足,只好使用其提供的原生sql查询.参考网上的一些资料,做一些总结. 对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行 ...

  6. Golang原生sql操作Mysql数据库增删改查

    Golang要操作mysql数据库,首先需要在当期系统配置GOPATH,因为需要使用go get命令把驱动包下载到GOPATH下使用. 首先配置好你的GOPATH,执行以下命令,下载安装mysql驱动 ...

  7. hibernate原生sql封装,报错信息:could not find setter for rownum_

    今天用hibernate的时候,用了一个原生态sql做了一个分页查询,结果就报错了... 找到解决方法了:http://shmily2038.iteye.com/blog/1704963

  8. Hibernate原生SQL查询数据转换为HQL查询数据方法

    HQL形式:(构造方法不支持timestamp类型) public List<Device> queryByMatherBoardId(String matherBoardId) { St ...

  9. hibernate原生sql获取list<T>异常解决

    /** * <p>Title: getbigestMinIntegral</p> * <p>Description: 获取最大的MinIntegral(原则上即最高 ...

随机推荐

  1. TFS - 使用微软测试管理器实现跨团队项目的测试用例管理

    在团队项目之间实现测试用例和测试计划的共享,是很多客户关注的问题.尤其在开发产品+服务的团队中,对测试用例的共享要求比较高.下面就如何在Team Foundation Server中如何实现团队项目之 ...

  2. AI (Adobe Illustrator)详细用法(五)

    最后的调整和输出. 一.改变形状工具/宽度工具/包裹工具 1.改变形状工具[整形工具] 改变形状工具可以让我们更细致的控制形状的改变. 用钢笔工具画一条曲线,并设置宽度样式等. 如果想让这条曲线形状变 ...

  3. git config命令使用

    1. git config简介 我们知道config是配置的意思,那么git config命令就是对git进行一些配置.而配置一般都是写在配置文件里面,那么git的配置文件在哪里呢?互动一下,先问下大 ...

  4. preg_match()漏洞

    今天大哥丢了一道题过来. <?php $str = intval($_GET['id']); $reg = preg_match('/\d/is', $_GET['id']); //有0-9的数 ...

  5. HTML 学习笔记 CSS(选择器)

    CSS元素选择器 最常见的CSS 选择器就是元素选择器 换句话说 文档的元素就是最基本的选择器 如果设置HTML样式 选择器通常就是某个HTML元素 比如p h1 em a 甚至可以是HTML本身 h ...

  6. ie6-ie8中不支持opacity透明度的解决方法

    ie6-ie8中是不支持的,需要加上下面这句话:filter: alpha(opacity=70);此外这种效果不能用ietester中的ie6测试,因为ietester的ie6这样写也是不透明的,但 ...

  7. ajax异步举例

    SelectInfo = { release_url: "/compatible/getReleaseFor", project_url: "/compatible/ge ...

  8. tomcat 启动参数 Xms, Xmx, XX:MaxNewSize, XX:PermSize, -XX:MaxPermSize, Djava.awt.headless

    在 tomcat/bin/catalina.sh 的 第一行#!/bin/sh 下添加 JAVA_OPTS="-server -Xms512m -Xmx1024m -XX:MaxNewSiz ...

  9. Java设计模式之-----工厂模式(简单工厂,抽象工厂)

    一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factor ...

  10. HTTP协议详细总结

    HTTP超文本传输协议,是WWW上应用的最多的协议.了解和掌握HTTP协议是对程序人员的基本要求. 转载请注明出处 http://www.cnblogs.com/zrtqsk/p/3746891.ht ...