关于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 将红字改为自己的类
?
?
?