mybatis结果返回与实体类字段类型不同的问题

在Springboot博客项目中,由于数据库查询结果与实体类字段类型不匹配导致异常。问题源于一个联合查询和Lombok的@AllArgsConstructor注解,当查询字段顺序与实体类参数顺序不一致,加上使用全参数构造器,会导致类型转换异常。删除@AllArgsConstructor注解后问题解决,强调在使用resultType时需保证字段顺序与实体类一致。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目场景:

Springboot博客项目,从数据库中获取帖子的标题等信息最终显示在网页上


问题描述

报错:org.springframework.dao.TransientDataAccessResourceException: Error attempting to get column 'title' from result set.  Cause: java.sql.SQLException: Invalid value for getInt() - '标题4'

1、从数据库获取帖子的标题内容时,发现数据库中t_invitation的column与实体定义字段的类型不匹配。检查表和实体没问题之后,继续排查

t_invitation

 

InvitationEntity

 2、检查sql语句,帖子表和帖子详情表(t_invitation_data)做了联合查询,排查帖子详情表的实体

<select id="selectIndexData" resultMap="indexDataResultMap">
        select t1.*,u.*,t2.*
,u.id as uid
,t1.id as tiid
,t2.id as tdid
from t_invitation as t1
left join t_user as u on t1.uid=u.id
left join t_invitation_data as t2 on t1.id=t2.tid
order by t1.createTime DESC
</select>
@AllArgsConstructor
@Data
@TableName("t_invitation_data")
public class InvitationDataEntity {

    @TableId(type = IdType.AUTO)
    private Integer id;  //  主键id
    private Integer tid;  //  帖子id
    private Long pv;  //  浏览量
    private Long likes;  //  点赞量
    private Long comments;  //  评论量
    private Long collect;  //  收藏量
}

发现问题出在@AllArgConstructor这个注解上,删除之后,重启项目解决


原因分析:

当springboot项目中使用了lombok,且使用了@AllArgsConstructor注解进行pojo类的全参数构造,如果你的mybatis中的结果返回采用的是resultType,则必须保证查询出来的字段顺序和pojo类的参数顺序保持一致,否则会出现参数错位,或者出现类型转换异常(比如第一个查出来的是字符串,pojo类中第一个参数时Date类型的时候就会出现类型转换异常)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值