Hibernate的getSQLQuery方法对char类型的解析问题

 

由于数据库中我们定义了idchar型,而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()进来!

         addScalarString     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,为啥不用呢?

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值