org.hibernate.PropertyNotFoundException: Could not find a getter for XXX

使用hibernate的时候,会出现PropertyNotFoundException异常,产生原因也很好找,通常的错误原因有:

1. hibernate配制文件错误,属性里有空格等。

2.是get方法和属性不对应。


今天调试的过程中,没有配置文件和get方法错误,还是出现了该异常

百度后发现很多都是胡写的,终于找到一篇文章解决了问题

hbm.xml中命名为mystate

修改了get方法的命名,原getMyState() 修改为getMystate()。


原因如下(引用原文):

反编译了hibernate代码发现hibbernate是这么处理的,首先利用配制文件的package和 name 找到要映射到的类,按上面的配制文件就是gmt.boss.interfaces.customer.po.TAccount,然后利用反射取出这个类的信息,取的时候利用了缓存的机制,不是每次都反射一次。然后用这个类的信息中的get,set方法和 配制文件中进行匹配。以上面的getGAccountId()为例, 先去掉这个方法中的前三位取余下的部分为flag1 =GAccountId,然后调用jdk中的Introspector.decapitalize把这个字符串dropCase得到flag2, 然而 Introspector.decapitalizedropCase的过程,如果这个字符串开头为一个以上的大写字母,那就不做任何操作反回原串,,所以flag2 =GAccountId。

匹配的过程为只要flag1 与flag2 中有一个和 配制文件中的property name一致就为正确的映射。GAccountId 显然和<property name="gAccountId" column="G_ACCOUNT_ID"type="java.lang.String" />无法匹配,抛出

原文地址如下:

http://hi.baidu.com/darkbreaker/blog/item/3074c5086c281fdd62d9869c.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值