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: 由于项目数据库表与其它产品共用表,改数据库基本上不可行。

至此

更多相关文章
一周排行