在创建Session的时候会告诉你Could not find a getter for xSize
经过Debug看了一下发现不是Hibernate的问题
他调用的是 java.beans包
Introspector.decapitalize(String name);
-
他得到getXSize这个方法名,substring[3]为XSize然后decapitalize之后不修改首位字符,就Could not find a getter for xSize了
这个是Java Bean的Spec里面规定的。方法有多种,你可以写成xsize这种全部小写,或者加"_"字符,如果你首位大写不在第二位就没问题了。
Hibernate的FAQ里面也有记录,简单提到了这个问题
I have a property named like getAFoo() / setAFoo() and Hibernate throws a PropertyNotFoundException at startup.
Use name="AFoo" from the property name, as per the JavaBeans spec. -
Sun的注释说明
but in the (unusual) special case when there is more than one character and both the first and second characters are upper case, we leave it alone.public static String decapitalize(String name)
- Utility method to take a string and convert it to normal Java variable name capitalization. This normally means converting the first character from upper case to lower case, but in the (unusual) special case when there is more than one character and both the first and second characters are upper case, we leave it alone.
比如Thus "FooBah" becomes "fooBah" and "X" becomes "x", but "URL" stays as "URL".
- Utility method to take a string and convert it to normal Java variable name capitalization. This normally means converting the first character from upper case to lower case, but in the (unusual) special case when there is more than one character and both the first and second characters are upper case, we leave it alone.
博客主要讨论了Java Bean中getter方法名的相关问题。如getXSize方法经处理后找不到对应getter,这是Java Bean规范规定的。解决方法有将名称写成全小写或加“_”等。同时提到Hibernate的FAQ也记录了类似问题。
1759

被折叠的 条评论
为什么被折叠?



