this.getSession().createSQLQuery("select id,name,state from tb")
.addScalar("id", Hibernate.STRING)
.addScalar("name", Hibernate.STRING)
.addScalar("state", Hibernate.STRING
).list();
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) SQL> select round(a,3) from t1; ROUND(A,3) SQL> select cast(a as int) from t1; CAST(AASINT) SQL> select cast(a as number(8,4)) from t1; CAST(AASNUMBER(8,4)) ————转自http://blog.sina.com.cn/s/blog_6bf3a474010121zt.html |