今天在开发过程中遇见很奇怪的问题,hibernate在使用getSession().createSQLQuery(sql).setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
方式查询时,返回一个map对象。在对象中取得数据库为Char类型的数据,能得到的只有该字段的第一位,其余的均会被右截断:如 字段名APPENDCODE 值00000026 那么 map.get('APPENDCODE ')为 '0'
另:我的数据库是DB2。
一阵google过后,看到一篇博客的回复写的有些道理
“
真正的原因在于Hibernate使用的dialect里面
将JDBC的CHAR映射到了Character而不是String”
究竟是不是这样呢?
查证了hibernate-3.2.0.ga.zip中的源代码。其中src\org\hibernate\dialect\DB2Dialect.java文件中发现了如下代码
public DB2Dialect() {
super();
registerColumnType( Types.BIT, "smallint" );
registerColumnType( Types.BIGINT, "bigint" );
registerColumnType( Types.SMALLINT, "smallint" );
registerColumnType( Types.TINYINT, "smallint" );
registerColumnType( Types.INTEGER, "integer" );
/********以下为重点**************/
registerColumnType( Types.CHAR, "char(1)" );
/********以上为重点**************/
registerColumnType( Types.VARCHAR, "varchar($l)" );
registerColumnType( Types.FLOAT, "float" );
registerColumnType( Types.DOUBLE, "double" );
registerColumnType( Types.DATE, "date" );
registerColumnType( Types.TIME, "time" );
registerColumnType( Types.TIMESTAMP, "timestamp" );
registerColumnType( Types.VARBINARY, "varchar($l) for bit data" );
registerColumnType( Types.NUMERIC, "numeric($p,$s)" );
registerColumnType( Types.BLOB, "blob($l)" );
registerColumnType( Types.CLOB, "clob($l)" );
}
如上,非常神奇的是hibernate将Char类型的注册对应类型数据库端写为了char(1)。确实让人不好理解。那么解决方案:
1 用addScalar(String arg,Type type)方法定义要返回的字段类型
2 修改相关dialect类,如
import java.sql.Types;
import org.hibernate.Hibernate;
import org.hibernate.dialect.DB2Dialect;
public class PmDb2Dialect extends DB2Dialect
{
public PmDb2Dialect()
{
super();
registerHibernateType(Types.CHAR,
"char");
}
}
然后改变hibernate配置
hibernate.dialect org.hibernate.dialect.DB2Dialect 将红字改为自己的类
分享到:
相关推荐
Hibernate分页查询小结
利用MYSQL数据库提供的样例数据库world建立的查询小例子。已经建立好了数据库对应的...本项目主要是为了练习使用Hibernate查询数据库。如果有什么问题可以发站内信或者邮件asddf14@hotmail.com。我会尽量解答一下~~~
Hibernate连表查询 Hibernate连表查询
关于Hibernate3中文查询出错问题的解决,相信有不少朋友也遇过这种问题,希望对大家有所帮助
hibernate查询之HQLhibernate查询之HQLhibernate查询之HQL
Hibernate的查询方式Hibernate的查询方式
利用MYSQL数据库提供的样例数据库world建立的查询小例子。已经建立好了数据库对应的...本项目主要是为了练习使用Hibernate查询数据库。如果有什么问题可以发站内信或者邮件asddf14@hotmail.com。我会尽量解答一下~~~
hibernate查询语句--HQL hibernate查询语句--HQL
超好用的hibernate查询工具类
hibernate多表联合查询实例,很经典的查询语句和总结.
Hibernate_query查询数据表中的一个字段.
这是一个不错的方法,用struts hibernate实现对oracle数据库的所有数据查询、显示,其中不包含分叶问题!
花了1天的时间整理的hibernate查询,以及spring+hibernate分页查询,游标查询 非常值得收藏
实际开发中碰到一个使用hibernate递归查询的问题。我解决了发出来给大家一起分享
7:Hibernate查询缓存Query Cache及实现
hibernate查询方法 大全 hql等
Hibernate_QBC查询
Hibernate提供的查询接口或其方法 hibernate综合查询解决方案
hibernate查询代码,以及hibernate.cfg.xml等的配置,四中查询
Hibernate3.x查询方式代码示例,详细教程参考我的Blog:http://blog.csdn.net/boyazuo