Hibernate实体命名Bug
来源:互联网 发布:id是什么软件 编辑:程序博客网 时间:2024/06/07 03:14
Hiberante和java Bean两者之间是由hbm.xml和get、set进行关联。但java Bean中的property属性的名字却有一个需要注意的小点,那就是类似于sName这种已单个字符小写开头,后接首字母大写的驼峰命名。在Hibernate中的BasicPropertyAccessor类中的getterMethod方法里的testStdMethod、testOldMethod两者和propertyName都不相等,在进行reflect反射时,属性名没有匹配到,从而直接continue跳过属性,那么在后期的java Bean的赋值时,抛出sName属性的getter方法没有找到异常。 其中Introspector.decapitalize是将methodName.substring(3)中的getSName进行字符串截取后的大小写转换。但是Introspector.decapitalize存在的异常是当首字母大写时,则不进行大小写转换,这中问题,不知是Hibernate故意为之还是无意导致,个人感觉是一个Bug。
private static Method getterMethod(Class theClass, String propertyName) { Method methods[] = theClass.getDeclaredMethods(); for(int i = 0; i < methods.length; i++) { if(methods[i].getParameterTypes().length != 0) continue; String methodName = methods[i].getName(); String testStdMethod; String testOldMethod; if(methodName.startsWith("get")) { testStdMethod = Introspector.decapitalize(methodName.substring(3)); testOldMethod = methodName.substring(3); if(testStdMethod.equals(propertyName) || testOldMethod.equals(propertyName)) return methods[i]; } if(!methodName.startsWith("is")) continue; testStdMethod = Introspector.decapitalize(methodName.substring(2)); testOldMethod = methodName.substring(2); if(testStdMethod.equals(propertyName) || testOldMethod.equals(propertyName)) return methods[i]; } return null; }
阅读全文
0 0
- Hibernate实体命名Bug
- Hibernate中实体映射时的命名策略(1)
- Hibernate中实体映射时的命名策略(2)
- HTML附加命名实体
- 实体数据库命名约定
- 命名实体识别
- 命名实体识别
- 中文命名实体识别
- 命名实体识别NER
- NLTK命名实体识别
- 命名实体的提取
- 命名实体识别
- 细粒度命名实体识别
- 命名实体识别
- CRF++命名实体识别
- 关于命名实体识别
- 命名实体识别方法
- 斯坦福大学命名实体识别
- 基于VS2013MFC左移显示效果
- Redis缓存与 Java
- Android 微信支付
- 携程--出行产品未来14个月预测
- CSS基本概念
- Hibernate实体命名Bug
- 为什么要分享!?
- locate
- Xen Server 7.0 一直无法退出维护模式
- QGC的mission 航点规划文件示例
- 官网快照被黑
- 摘自同事的网络故障报告,值得分享
- AC删除日志
- VM下扩容Linux需要注意格式