今天做一个例子,出现了这样的情况,数据库有一个字段:busiType char(2)类型
查询的代码如下:
String hql = "select count(*) from BZJ_BUSIACC a inner join a.BZJZTB d join a.BUSITB c where c.BUSI_TYPE=:busiType ";
Query query = session.createQuery(hql).setParameter("busiType", "2");
这样查询出来是查不出结果的,在网上找了一下,也没找到答案,突然发现数据库定义的长度是char(2)是定长,而里面的值是2,只有1个长度,所以查不出来,后来我把输入的参数"2"改成"2 ",也就是2后面加一个空格,果不其然就能查出来了,看样子还是数据库设计的有问题。

解决方案 »

  1.   

    一直用varchar的飘过,没遇到过楼猪的问题
      

  2.   

    你的sql语句有问题,内连接查询不是你这样用得;你最好看看左、右、内连接的使用方法。
      

  3.   

    char跟varchar是有很大区别的!!!
    用char呢、如果你定义的长度是2那么你保存的时候、存的是"2"
    但是入库后呢、数据库会自动用空格填充、让它满足Length!如果超出肯定会报错的!
    也就是"2 "!
      当你去查询的时候、select * from Table WHERE 字段="2"!
     这样很明显! "2 "跟"2"是不会相等的嘛!!!
    如果你用的是varchar的话、他不管你存储的字符的长度是否满足!
    它不会给你填充了!
      

  4.   

    对了,才看到你的HQL写错了就是连接查询哪儿
      

  5.   

    char(2),当输入的长度不到2时,会自动填充空格。
    用varchar(2)就可以偶一直用varchar