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

http://blog.csdn.net/u011650565/article/details/9925381

使用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" />无法匹配,抛出异常

问题:

今天在调试下钻表格时,出现了org.hibernate.PropertyNotFoundException: Could not find a setter for XXX 异常。原因是关系型数据库中字段和hibernate实体类属性名的大小写不一致,导致找不到属性的set方法。

解决方法:

原本在Dao层使用sql语句,在关系型数据库中查询,使用Query对象的createSQLQuery方法,抛出异常。代码如下:

String sql="select *from TB_CUBE_DXSBTJ where YLJG_ID=? and NF_ID=? and SJ_ID=?";
Query query=this.getSession().createSQLQuery(sql);

改为在Dao层使用hql语句,使用Query对象的createQuery方法后解决。代码如下:

String sql="from TbCubeDxsbtj where yljg_id=? and nf_id=? and sj_id=?";
Query query=this.getSession().createQuery(sql);

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 创建工程可以是java也可以是web 1、引入jar文件 2、设计表同时开发和表的字段名一致的javabean(持...
    蘋果_283e阅读 3,555评论 0 0
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,226评论 18 399
  • Hibernate: 一个持久化框架 一个ORM框架 加载:根据特定的OID,把一个对象从数据库加载到内存中OID...
    JHMichael阅读 6,070评论 0 27
  • 一. Java基础部分.................................................
    wy_sure阅读 9,280评论 0 11
  • 先打开上一篇文章新建的那个啥也不干的项目。想要单片机干点啥,你先要准备好 datasheet。 一般编程语言的第一...
    乱世工人阅读 4,328评论 0 5