Mybatis: Cannot determine value type from string 'city2001'

当查询的实体类没有无参构造方法时,查询报错:

Cannot determine value type from string 'city2001'; nested exception is java.sql.SQLDataException: Cannot determine value type from string 'city2001'] with root cause

猜测

​ 依稀记得我对实体类创建了全参构造方法,但是忘记加上无参构造方法,而 Mybatis 的映射机制应该是使用 set 方法进行属性映射,当无参构造方法没了,new 不出对象,也就自然没法自动映射了。

实体类 Student.java

public class Student implements Serializable {
    private static final long serialVersionUID = -49141689091044211L;
    private Long id;
    private String name;
    private String city;
    private Integer age;

    public Student(String name, String city, Integer age) {
        this.name = name;
        this.city = city;
        this.age = age;
    }
    
    ...... 省略 Get Set

初步验证

​ 简单的 Debug 了一下源码,结合网上的资料, org.apache.ibatis.executor.resultset.DefaultResultSetHandle
类中发现方法 createAutomaticMappings
,该方法处理了前缀,并判断有没有对应的 Set 方法,然后进行注入。

......
......
final String property = metaObject.findProperty(propertyName, configuration.isMapUnderscoreToCamelCase());
        if (property != null && metaObject.hasSetter(property)) {
          if (resultMap.getMappedProperties().contains(property)) {
            continue;
          }
......
......

入门小白,才学疏浅,若有疏漏,欢迎指出。

本文首次更新时间 2020-04-28

本文最后更新时间 2020-04-28 (若有突破,持续更新)

基于Halo 搭建的个人博客https://undivided.top

原文 

https://segmentfault.com/a/1190000022496201

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » Mybatis: Cannot determine value type from string 'city2001'

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址