Hibernate映射oracle中的 char 注意事項

项目数据表有一个字段为CHAR(30),导致hibernate HQL 查询时添加参数后查询为空。

分析一下原因:

  CHAR字段为固定长度,就算是只存一个字母'A',那在数据库也是'A          ...'后面跟29个' '空格。

  而hibernate默认生成查询后,并没有对字符串进行append空格处理(不排除驱动版本问题),导致查询结果不正确。

  在stackoverflow上也有这样的问题,但是并没有解决~

  所以还是自己动手写一个简单的字符串格式化类吧~调用时直接这样 JPACharUtil.convertToChar("abc", 30) 就可以了~

  贴代码:

Hibernate映射oracle中的 char 注意事項
Hibernate映射oracle中的 char 注意事項
 1 /**
 2  * 
 3  * 有时候数据库中的字段是CHAR类型的,Hibernate以此列为条件查询的时候会出不出东西。
 4  * 因为需要将条件进行append空格来达到指定长度才可以。
 5  * @author kischn
 6  * @date 2015-10-15
 7  */
 8 public class JPACharUtil {
 9     
10     /**
11      * 将字符串进行增加空格处理来达到指定长度,超长的就只取前destLength部分
12      * @param sourceStr 源字符串
13      * @param destLength 指字长度
14      * @return 格式化后的字符串
15      */
16     public static String convertToChar(String sourceStr, int destLength){
17         
18         if(sourceStr == null) return null;
19         
20         StringBuilder targetString = new StringBuilder(sourceStr);
21         int srcLen = sourceStr.length();
22         if(srcLen < destLength){
23             for(int i = srcLen; i < destLength ; i ++){
24                 targetString.append(' ');//长度不够的用' '填充
25             }
26         }else if(srcLen > destLength){
27             targetString.delete(destLength, srcLen);//超长的就剪掉
28         }
29         
30         return targetString.toString();
31     }
32 }
JPACharUtil.java

 

PS: 由于项目数据库表与其它产品共用表,改数据库基本上不可行。

至此

更多相关文章
一周排行
  • Switching to object-based data storage can often be tough.  If you’re trying to start Phonegap or Ionic Fram
  • <?xml version='1.0' encoding='UTF-8'?> <!--表明解析本XML文件的DTD文档位置,DTD是Document Type Definition 的缩写,即文档类 ...
  • 专业的课前调查与评估 为您提供的培训方案是否真的贴近当前的企业需求,课前调查的作用举足轻重.根据与客户的前期交流与访谈,苏州派森将根据需求与当前企业工作流程制定一份详尽的调查问卷,分别了解所有学员当前的office软
  • 威武的word Blog
     这是word  Dfadf    发的发        阿迪发的发    带到
  • 1. 常用的网络测试命令: 1)ping:测试当前系统的网络是否连通: 2)traceroute:向目的主机放松数据包,每经过一个网络或路由器就返回一行信息,内容包括网络或路由的主机名或IP地址以及经过的时间(ms)
  • 一直想把学到的内容做个记录,可还是犯了懒病,总想休闲一下,今天找个时间整理一下昨天做的内容. 1.FLASH 提交变量给.net,然后.net返回一个xml给flash,flash再做出判断到指定的页面. var m ...
  • After installed gwt-linux-1.4.59 and run the code in "GWT in action". got error message like " ...
  • tree命令是以图形化的树结构打印文件和目录的主角.通常linux发行版本中并没有包括这个命令.你需要用包管理器自行安装. 实例: 1. tree 打印当前目录下所有文件 2. tree –p ${dir} 打印di
  • 


    		    SQL2K數據庫開發二之查看和修改Sample數據庫
    1.在SQL Server 企业管理器中,选择"数据库"节点,右击sa ...
  • Matlab map
    初始文件格式: svid=26,frm_cnt=1,max_freq=233,max_ch ...