rapid版本:rapid-framework-3.5.1.3.zip
使用的相关插件组合是:jdbc+Struts2
按如下步骤重现错误: 1.数据库列名为 P_MULTIPLY CO_NO 2.最后SQL中会变成 PMULTIPLY CO_NO
期待的结果是: P_MULTIPLY CO_NO
查看代码知这部分转换存在于 cn.org.rapid_framework.jdbc.sqlgenerator.metadata.MetadataCreateUtils 中toUnderscoreName函数 1.数据库表对应的MODEL中相应字段为 pmultiply coNo 2.toUnderscoreName函数中会通过判断下一个字符是否为大写来添加下划线
因此问题的关键在于创建列名时对于 单字符+下划线+其余字符的列名转换存在问题
对于 P_MULTIPLY 列应该转化为 pMultiply 而非 pmultiply
Comment #1
Posted on Jun 23, 2010 by Happy Oxpublic static String makeAllWordFirstLetterUpperCase(String sqlName) { String[] strs = sqlName.toLowerCase().split("_"); String result = ""; String preStr = ""; for(int i = 0; i < strs.length; i++) { if(preStr.length() == 1) { result += strs[i]; }else { result += capitalize(strs[i]); } preStr = strs[i]; } return result; }
好像问题就在这里 if(preStr.length() == 1) { result += strs[i]; 这里为什么要加上一个判断呢?
Comment #2
Posted on Jun 23, 2010 by Grumpy Elephant参考这里: http://code.google.com/p/rapid-framework/wiki/rapid_sqlgenerator
可以使用JPA的annotation,现只支持@Table,@ID,@Column,@Transient,示例如下:
@Column(name="ann_age")
Comment #3
Posted on Jun 23, 2010 by Grumpy Elephant对于 P_MULTIPLY 列应该转化为 pMultiply 而非 pmultiply
我现在将单字母转为pmultiply认为是正常的。
Status: WontFix
Labels:
Type-Defect
Priority-Medium