读书人

关于hibernate查询的小疑点

发布时间: 2012-11-16 14:12:14 作者: rapoo

关于hibernate查询的小问题

今天在开发过程中遇见很奇怪的问题,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将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 将红字改为自己的类

?

?

?

读书人网 >软件架构设计

热点推荐