您的位置:首页 > 编程语言 > Java开发

There is no getter for property named 'xxx' in 'class java.lang.Long'

2015-12-31 00:56 781 查看
Do not go gentle into that good night

这是昨天加班的时候遇到的一个问题,之前似乎遇到过不过可能当时没这么在意;

开发环境:

Eclipse 4.3
jdk1.7.0_72
apache-maven-3.0.4
apache-tomcat-7.0.53
spring-mvc-4.0
spring-beans-4.0
mybatis-3.2.8


问题是这样的,当时我想使用一个查询语句,方法入参是个Long类型的ID,通过入参查询得到一个结果集;

结果在查询的时候抛了下面的异常:

08:59:54.415 [http-bio-8097-exec-6] ERROR PLATFORMERROR - ( MyExceptionHandler, 24            ) 后台程序运行异常,e.getMessage:nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'cfgDetailId' in 'class java.lang.Long'e.getCause:org.apache.ibatis.reflection.ReflectionException: *

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'cfgDetailId' in 'class java.lang.Long'

at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:75) ~[mybatis-spring-1.2.2.jar:1.2.2]

at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:371) ~[mybatis-spring-1.2.2.jar:1.2.2]

at com.sun.proxy.$Proxy20.selectList(Unknown Source) ~[na:na]

at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:198) ~[mybatis-spring-1.2.2.jar:1.2.2]

at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:119) ~[mybatis-3.2.8.jar:3.2.8]

at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:63) ~[mybatis-3.2.8.jar:3.2.8]

at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:52) ~[mybatis-3.2.8.jar:3.2.8]

at com.sun.proxy.$Proxy114.queryOfferBankMappingByCfgDeitalId(Unknown Source) ~[na:na]

at com.jfbank.cicada.service.offermanager.impl.OfferManagerServiceImp.queryMngByPrimaryKey(OfferManagerServiceImp.java:176) ~[OfferManagerServiceImp.class:na]

at com.jfbank.cicada.controller.offer.manager.OfferManagerController.drawNumPlanEdit(OfferManagerController.java:100) ~[OfferManagerController.class:na]


看到这个异常的第一反应是自己在mapper中接收参数的变量写错了,来回查看了一遍发现没问题,于是又想是否是bean中配置的getsetter名称的问题,再看无果后无奈上网一查,发现果然有人遇到了相同的问题,不过他们的入参大部分是String类型的;

有人提到这个问题引发的原因是因为Mybatis默认采用ONGL表达式读值导致的;

解决方案很简单,在java代码中使用@Param 标签指定传入参数名称即可;

public String queryMethodName(@Param(value="varName") Long varName);


至于其他哥们儿说的什么用“parameter_“代替变量名什么的个人感觉不太靠谱,而且我也确实试过发现没用;所以还是这样解决比较好;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: