在使用Hibernate的原生态SQL对Oracle进行查询时,碰到查询char类型的时候始终返回的是一个字符,开始认为应该是Hibernate在做映射的把数据类型给映射成char(1),在经过查找网上的一些资料,得知产生这个问题的主要原因确实是Hibernate再查询Oracle的时候,将char自动映射成character(varchar的子集)类型,oracle的char字段在hibernate里映射为character类型,是varchar的子集
1:将你要查询的实体转换成实体Bean</STRONG>,使用HQL查询,每个表都有映射文件配置,反向工程生成的映射文件里对于多字符的char会自动映射到java中的string类型。这样就不存在字段映射的问题了,但是这样不能使用SQL;
2:可以使用Hibernate中的addScalar(String arg,Type
type)来自定义返回字段的类型,如:
this.getSession().createSQLQuery("select
id,name,state from tb")
.addScalar("id",
Hibernate.STRING)
.addScalar("name",
Hibernate.STRING)
.addScalar("state", Hibernate.STRING
).list();
这样就可以解决,但是这样的话,必须把所有要查询的字段进行定义,在字段比较多的时候,就相对比较麻烦
3:在Oracle查询语句中直接指定数据格式,如:
select
id,name,cast(state as varchar(2)) from tb
这种解决方法比较方便,只需要在查询语句指定char的返回类型,推荐使用这种方法进行查询。
4、修改hibernate默认的char映射类型
通过重写继承其方言类实现。自定义Hibernate
Dialect.我用的数据库是ORACLE,:
首先建一个类,继承com.digitwater.fwk.hibernate.Oracle9iDialect,该类的内容如下:
package com.digitwater.fwk.hibernate;
import java.sql.Types;
import org.hibernate.Hibernate;
/
/
public Oracle9iDialect() {
super();
registerHibernateType(Types.CHAR,
Hibernate.STRING.getName());
}
}
第二步,就是修改hibernate的配置文件hibernate.cfg.xml:
将:
<prop
key="hibernate.dialect">org.hibernate.dialect.Oracle9iDialect</prop>
改为:
<prop
key="hibernate.dialect">com.digitwater.fwk.hibernate.Oracle9iDialect</prop>
此方法改动是最小的。目前使用正常,暂时没发现其它问题。附:oracle cast()函数用法:
cast 是进行类型转换的, 可以针对各种Oracle数据类型. 修改的是用户的数据类型.
round只是修改的数据显示格式. 对数据做四舍五入.
类似的函数还有ceil(取此数据的最小整数).
trunc( 取整函数.)
SQL> create table t1(a varchar(10));
Table created.
SQL> insert into t1 values ('12.3456');
1 row created.
SQL> select round(a) from t1;
ROUND(A) ---------- 12
SQL> select round(a,3) from t1;
ROUND(A,3) ---------- 12.346
SQL> select cast(a as int) from t1;
CAST(AASINT) ------------ 12
SQL> select cast(a as number(8,4)) from
t1;
CAST(AASNUMBER(8,4)) -------------------- 12.3456
————转自http://blog.sina.com.cn/s/blog_6bf3a474010121zt.html
|
分享到:
相关推荐
Hibernate SQLQuery 查询Oracle char类型结果为一个字符解决方法 Hibernate SQLQuery 查询Oracle char类型结果为一个字符解决方法 Hibernate SQLQuery 查询Oracle char类型结果为一个字符解决方法 Hibernate SQL...
HIbernate与oracle数据库应用例子
JDBC+Hibernate将Blob数据写入Oracle
hibernate连接oracle的jar包 包括了连接字符串
hibernate链接oracle
使用hibernate的query调用oracle的存储过程/function,包含例子,源码以及数据库文件
Hibernate实现Oracle中数据的增删改查http://blog.csdn.net/guoquanyou/article/details/6787892
hibernate存取oracle的clob
spring+struts+hibernate+oracle10g的研究人员查询系统 spring,struts,hibernate,oracle,查询系统 简易的查询系统,整合了j2ee多个框架知识,适合ssh初学者参考!
是我自己做的springMVC+hibernate的环境,包括连接数据库查询,基于注解的方式
基于struts+spring+hibernate+oracle的移动ssh项目源码 基于struts+spring+hibernate+oracle的移动ssh项目源码 基于struts+spring+hibernate+oracle的移动ssh项目源码 基于struts+spring+hibernate+oracle的移动ssh...
jsp+hibernate+oracle出库单模块,通过了juint测试
本示例演示Hibernate 3.2呼叫Oracle的存贮过程和函数,以及通过Hibernate的Query接口简化JDBC的开发步骤--两个步骤得到List集合。使用这种方式开发可以要求开发人员不需要太了解Hibernate框架,但是需要开发人员非常...
使用JDBC和Hibernate来写入Blob型数据到Oracle中;使用JDBC和Hibernate来写入Blob型数据到Oracle中
Hibernate_query查询数据表中的一个字段.
springmvc+hibernate+oracle基础框架,项目源码和数据库脚本(dmp、sql),添加myeclipse中可以直接使用
Oracle jdbc Hibernate 驱动
struts2+hibernate+oracle
很多人都对Java在批量数据的处理方面是否是其合适的场所持有怀疑的念头,由此延伸,...下面以Hibernate为例来做为说明,假如我们真的不得不在Java中使用Hibernate来对数据进行批量处理的话。 向数据库插入100 000条数据
一下午才整合成功,书中的bulidSessionFactory()方法在hibernate4.3.5中已经deprecated,这里面有方法实现,用完请给好评。