javaBean中字段名定义应该规避的一个问题

如果我们在HBM.XML中定义
在创建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".

你可能感兴趣的:(javaBean中字段名定义应该规避的一个问题)