由于数据库中我们定义了id为char型,而hibernate自动会把char(n)转换为char(1)型,所以出现了上面的结果。
知道了什么原因,我们就可以思考解决方案了。
1) 把数据库方言做一下约束
在hibernate.hbm.xml中修改数据库方言为我们自定义的。
<property name="dialect">com.ying.LongCharDialect</property>
|
重新定义一个新的方言类,使char型的数据映射为String类型
public class LongCharDialect extends SybaseDialect {
public LongCharDialect(){
super();
registerHibernateType(Types.CHAR, Hibernate.STRING.getName());
}
}
|
2) 调用addScalar()方法
Query query = session.createSQLQuery(sHQL).addScalar("id", Hibernate.STRING).addScalar("name");
|
这样就解决了CHAR字段类型只出一位字符的问题。 但是需要把其他字段也addScalar()进来!
addScalar (String arg)里的参数是需要大写的!
3) 换用session.createQuery()方法,用HQL语言来查询,因为HQL语言全部把数据库映射成POJO和
XML文件了,在 XML 文件中就有对应的映射规则,在里面我们把char类型的字段映射成String类型就行了。
这样我们用createQuery()方法就能返回一个个的POJO类型的对象。
4) 调用addEntity()方法,这个的前提也是得定义了映射实体类。
Query query = session.createSQLQuery(sHQL).addEntity(TTest1.class);
|
至此,已解决,不过还是建议不要用char类型,有那么好的varchar,为啥不用呢?
分享到:
相关推荐
Hibernate SQLQuery 查询Oracle char类型结果为一个字符解决方法 Hibernate SQLQuery 查询Oracle char类型结果为一个字符解决方法 Hibernate SQLQuery 查询Oracle char类型结果为一个字符解决方法 Hibernate SQL...
Hibernate的char问题.txt
使用hibernate封装方法,显现使用一个dao,service,impl来关联两个表的操作,实现,增删改查基本操作
hibernate常用方法集合
Hibernate 映射类型与Java 类型的对照表
hibernate映射枚举类型,hibernate如何映射枚举类型
NULL 博文链接:https://chenyi-dt.iteye.com/blog/666611
Netbeans 配置 hibernate 的方法
hibernate和java类型转换,hibernate和java类型转换
解决Hibernate对于Date类型的数据返回结果中时分秒不对的问题
hibernate对Blob类型字段进行数据添加.txt
Hibernate中数据类型,涵盖了所有数据库的字段类型与Java基本类型间的映射关系
hibernate框架一对一测试案例,第四篇,使用于新手
Hibernate基本数据操作方法 java struts hibernate
hibernate中使用自定义类型映射Oracle LONG类型
hibernate方法实现
在Hibernate中如何使用枚举映射,Hibernate中映射枚举类型
Hibernate双向一对一关联映射(注解版)
详尽说明了hibernate的多对多原理。