在使用Hibernate的原生态SQL对Oracle进行查询时,碰到查询char类型的时候始终返回的是一个字符,开始认为应该是Hibernate在做映射的把数据类型给映射成char(1),在经过查找网上的一些资料,得知产生这个问题的主要原因确实是Hibernate再查询Oracle的时候,将char自动映射成character(varchar的子集)类型,现有以下几种解决方法:
1:将你要查询的实体转换成实体Bean,使用HQL查询,这样就不存在字段映射的问题了,但是这样比较麻烦;
2:可以使用Hibernate中的addScalar(String arg,Type type)来自定义返回字段的类型,如:
view sourceprint?1 this.getSession()
2 .createSQLQuery("select id,name,state from tb")
3 .addScalar("id", Hibernate.STRING)
4 .addScalar("name", Hibernate.STRING)
5 .addScalar("state", Hibernate.STRING)
6 .list();
这样就可以解决,但是这样的话,必须把所有要查询的字段进行定义,在字段比较多的时候,就相对比较麻烦;
3:在Oracle查询语句中直接指定数据格式,如:
view sourceprint?1 select id,name,cast(state as varchar(2)) from tb
这种解决方法比较方便,只需要在查询语句指定char的返回类型,推荐使用这种方法进行查询。
分享到:
相关推荐
NULL 博文链接:https://mlxnle.iteye.com/blog/1766676
使用hibernate的query调用oracle的存储过程/function,包含例子,源码以及数据库文件
Hibernate+本地SQL查询SQLQuery宣贯.pdf
hibernate sql hqlsql
Hibernate_query查询数据表中的一个字段.
我们能够很方便的创建一个SQLQuery(SQLQuery是一个接口,在Hibernate4.2.2之前,默认返回的是SQLQuery的实现类——SQLQueryImpl对象,在下文中出现的SQLQuery如非注明,都是指该子类)对象来进行原生SQL查询:。...
背景如果文本值存储在数据类型为CHAR(n)的 Oracle 列中,则数据库在将该值保存到列之前最多n字符。 后来,尝试使用 Hibernate 或 JPA 等框架搜索具有相同值的列失败,因为搜索词没有填充到n ,导致搜索词与列中存储...
使用本地sql语句查询后,无需再使用Object对查询结果进行强制转换,而是直接将查询结果放到实体Bean里了。 PS: 其实只有一版,这里只所以叫最终版是因为该附件我上传了好几天传不上去,到最后报告说‘资源已经存在...
hibernate实现动态SQL查询,通过XML配置SQL,FREEMARKER 解析,生成要执行的SQL
hibernate连接mysql,oracle,sqlserver, access数据库包和方法
Hibernate+本地SQL查询SQLQuery.pdf
一个简单的hibernate_4 链接Oracle例子
fix包 博文链接:https://raymondhekk.iteye.com/blog/250427
hibernate中使用自定义类型映射Oracle LONG类型
车辆管理系统(struts+hibernate+spring+oracle).rar
hibernate+proxool+Oracle库
hibernate将本地SQL查询结果封装成对象。如进行复杂的统计等本地sql语句查询后,直接放到对象里了,而不会再使用Object进行强转
JSP源码——车辆管理系统(struts+hibernate+spring+oracle).zip