赞
踩
省流:加了@Builder导致报错。
需再加两个注解@NoArgsConstructor,@AllArgsConstructor
报下标越界,持久化异常
- org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
- ### Error querying database. Cause: java.lang.IndexOutOfBoundsException: Index 3 out of bounds for length 3
先排查sql是否错误。复制打印的sql,可以查询出数据。sql正确。
既然sql可以查到数据,那就只能从mybatis实体映射的角度出发来考虑。
- @Data
- @Builder
- public class Org{
- private String id;
- private String orgCode;
- private String orgName;
- private Date createTime;
- private Date updateTime;
- }
因为这里使用了lombok插件。如果不使用lombok,实体类中只需要有getter和setter方法即可。
那很有可能是lombok导致。
看下编译后的class文件,发现只有一个全参构造,没有无参构造。
mybatis将查询结果映射成实体时是通过无参构造获得一个实例,然后调用setter方法将值存入字段。
在实体类增加注解@NoArgsConstructor和@AllArgsConstructor,使编译器编译的时候提供出无参构造。
- @Data
- @Builder
- @NoArgsConstructor
- @AllArgsConstructor
注意:因为使用@Builder注解,所以光添加一个@NoArgsConstructor,程序会编译报错,builder需要一个全参构造,所以还得加上@AllArgsConstructor。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。