Hibernate查询常量只返回第一个字符

问题

在Hibernate中如果通过

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

查询,返回值中只会有一个“合”字。
经查,常量在数据库中被认为是CHAR类型的,Hibernate取值时将其保存为Character类型,而Character只能保存一个字符,所以造成返回值中只存在一个字符。

解决方法

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

1.继承一个Dialect,并注册CHAR类型的对应方式。代码如下:
public class MySQLServerDialect extends org.hibernate.dialect.SQLServerDialect  
  {  
     public MySQLServerDialect()  
      {  
          super();  
         //very important, mapping char(n) to String  
         registerHibernateType(Types.CHAR, Hibernate.STRING.getName());  
     }  
 }  

2.设置字段对应的类型

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

session.createSQLQuery("select '合计' as name from dual").addScalar("name", Hibernate.STRING).list()  
3.在SQL中设置该字段的类型,代码如下
session.createSQLQuery("select cast('合计' as varchar(4)) as name from dual").list()  
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,765评论 18 399
  • Hibernate中配置主要分为两种:一种包含了Hibernate与数据库的基本连接信息,在Hibernate工作...
    FTOLsXD阅读 2,145评论 0 10
  • 本文包括: 1、CRM 项目的整体介绍 2、Hibernate 框架概述 3、Hibernate 快速入门 4、H...
    廖少少阅读 3,485评论 9 66
  • Hibernate: 一个持久化框架 一个ORM框架 加载:根据特定的OID,把一个对象从数据库加载到内存中OID...
    JHMichael阅读 1,995评论 0 27
  • 千里马常有,而伯乐不常有。然,伯乐向千里马伸出橄榄枝的时候,你敢抓住吗? 2017年8月14日 星期一 雨 ...
    慧子有约阅读 1,154评论 2 3