在Hibernate中如果通过

[java] view
plain
copy

  1. session.createSQLQuery("select '合计' as name from dual").list()

查询,返回值中只会有一个“合”字。

经查,常量在数据库中被认为是CHAR类型的,Hibernate取值时将其保存为Character类型,而Character只能保存一个字符,所以造成返回值中只存在一个字符。Hibernate官方已存在此bug ,却从未修复。

该bug中给出2中解决方法:

1.继承一个Dialect,并注册CHAR类型的对应方式。代码如下

[java] view
plain
copy

  1. public class MySQLServerDialect extends org.hibernate.dialect.SQLServerDialect
  2. {
  3. public MySQLServerDialect()
  4. {
  5. super();
  6. //very important, mapping char(n) to String
  7. registerHibernateType(Types.CHAR, Hibernate.STRING.getName());
  8. }
  9. }

2.设置字段对应的类型(缺点是如果查询很多字段,每个字段都必须设置,没设置类型的字段在结果集中是不存在的),代码如下

[java] view
plain
copy

  1. session.createSQLQuery("select '合计' as name from dual").addScalar("name", Hibernate.STRING).list()

还有一种解决方法是在SQL中设置该字段的类型,代码如下

[java] view
plain
copy

  1. session.createSQLQuery("select cast('合计' as varchar(4)) as name from dual").list()

该方法在Oracle和SQL Server中可用。

Hibernate中将SQL查询出来字段转换为对象的方法有两种

1.使用ResultTransformer,代码如下

[java] view
plain
copy

  1. query.setResultTransformer(new AliasToBeanResultTransformer(StudentDTO.class)).list()

这种方法要求数据库的字段名和类的属性的大小写必须一致,但是Oracle查询返回的字段名却全是大写。

2.使用addEntity方法,这种方法的缺点是SQL必须写成select * from users的形式或select {a.*},{b.*} from a,b where...的格式。

转至:http://blog.csdn.net/snowclash/article/details/6200768#comments

Hibernate通过SQL查询常量时只能返回第一个字符的解决方法的更多相关文章

  1. Hibernate应用SQL查询返回实体类型

    Hibernate应用SQL查询返回实体类型 Hibernate使用SQL查询返回实体类型 以前,使用SQL查询,结果放在 RS 结果集中,还要去转换影射到Java类中.Hibernate中,可以自动 ...

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

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

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

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

  4. Hibernate纯sql查询VO对象封装

    hibernate 纯sql查询返回结果集(未关联映射)组装VO的问题//须保证别名字段与Vo字段一致 //引号中为vo对象属性需与sql查询返回字段一致.addScalar("chname ...

  5. Mybatis按SQL查询字段的顺序返回查询结果

    在SpringMVC+Mybatis的开发过程中,可以通过指定resultType="hashmap"来获得查询结果,但其输出是没有顺序的.如果要按照SQL查询字段的顺序返回查询结 ...

  6. sql查询语句时怎么把几个字段拼接成一个字段

    sql查询语句时怎么把几个字段拼接成一个字段SELECT CAST(COLUMN1 AS VARCHAR(10)) + '-' + CAST(COLUMN2 AS VARCHAR(10) ...) a ...

  7. laydate时间组件在火狐浏览器下有多时间输入框时只能给第一个输入框赋值的问题

    遇到的问题: laydate时间组件在火狐浏览器下有多时间输入框时只能给第一个输入框赋值的问题(safari下也有同样问题); 解决办法: 给laydate绑定id; 解决前代码: <input ...

  8. session_start()导致history.go(-1)返回时无法保存表单数据的解决方法

    问题背景: 在填写完表单提交时,由于某个表单项可能填写的不合法,导致提交失败,返回表单页面.但返回后所有的表单都被清空了,重新填写比较麻烦,度娘解释说,是由于每个页面都调用了session_start ...

  9. resultMap中的collection集合出现只能读取一条数据的解决方法

    查询数据时只能获得collection集合中的的一条数据,相关情况如下: 结果集resultMap: <resultMap id="ManagerRolesAcls" typ ...

随机推荐

  1. 教你从手机中提取system镜像制作线刷救砖包的简单方法

    其实在制作刷机包的过程中,有时候没有官方或者第三方提供的救砖包(线刷),那怎么办?常规的方法有两种:(此处为常规方法,回读的方式暂不说明)     1.卡刷包转线刷包     2.dd命令导出分区镜像 ...

  2. 1086: [SCOI2005]王室联邦

    1086: [SCOI2005]王室联邦 Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special JudgeSubmit: 1554  Solved: ...

  3. [HNOI 2013]数列

    Description 题库链接 给你四个数 \(N,K,M,P\) ,让你生成一段长度为 \(K\) 严格单调递增序列,并且满足: 第一位可以为任意元素: 相邻两位的差值不超过 \(M\) : 序列 ...

  4. [SDOI 2009]Elaxia的路线

    Description 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间.Elaxia和w**每天都要奔波于宿舍和实验室之间, ...

  5. ●BZOJ 1444 [Jsoi2009]有趣的游戏

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=1444题解.1: 概率dp,矩阵乘法,快速幂. 对所有串建立AC自动机, 那么如果在trie树 ...

  6. SPFA小总结

    关于spfa 知识点 原始版 ---裸 应用: 一.判负环 两种方法 1.跑单源点bfs,如果某一个点入队了n-1次,存在 2.对于每个点dfs,如果此源点反被其他点更新,存在 证明:点i作为源点,d ...

  7. SpringBoot添加自定义拦截器

    拦截器的主要作用是拦截用户的请求并做相应的处理,如判断用户是否登录,用户是否具有操作权限等等. 实现 HandlerInterceptor 接口来拦截请求 public class MyInterce ...

  8. 笔记5 bean的作用域

    1. Spring定义了多种作用域,可以基于这些作用域创建bean,包括: 单例(Singleton):在整个应用中,只创建bean的一个实例.(默认) 原型(Prototype):每次注入或者通过S ...

  9. 数据结构之B树、B+树(二)---代码实现

    B-Tree | Set 1 (construct) Following is an example B-Tree of minimum degree 3. Note that in practica ...

  10. iOS 定位简单使用

    一.配置 导入库CoreLocation. 2.info.plist配置key NSLocationWhenInUseUsageDescription和NSLocationAlwaysUsageDes ...