栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

记录一次Mybatis查询显示数据长度超出预期的bug

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

记录一次Mybatis查询显示数据长度超出预期的bug

异常:

org.springframework.dao.DataIntegrityViolationException: Error attempting to get column 'company_id' from result set. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLDataException: '1.46335159215351398E18' in column '2' is outside valid range for the datatype INTEGER. ; '1.46335159215351398E18' in column '2' is outside valid range for the datatype INTEGER.; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLDataException: '1.46335159215351398E18' in column '2' is outside valid range for the datatype INTEGER.
大概就是告诉我第二个元素超出预期,类型为Integer
前置条件如下:
pojo:

@Data
public class CompanyBadge {
    @TableId(value = "id",type = IdType.ASSIGN_ID)
    private Long id;
    private Long companyId;
    private Long badgeId;
    private Integer isEnable;
    private Date created;
    private Date updated;

    public CompanyBadge(Long companyId, Integer isEnable) {
        this.companyId = companyId;
        this.isEnable = isEnable;
    }
}

操作:

public Badge queryCompanyBadgeByCompanyId(Long companyId) {
        LambdaQueryWrapper queryCompanyBadge = new LambdaQueryWrapper<>();
        queryCompanyBadge.eq(CompanyBadge::getCompanyId, companyId);
        queryCompanyBadge.eq(CompanyBadge::getIsEnable, SwitchEnum.ACTIVATED_STATE.getSwitch());
        queryCompanyBadge.orderByDesc(CompanyBadge::getUpdated);
        List companyBadges = companyBadgeMapper.selectList(queryCompanyBadge);
        // 长度异常
        if (companyBadges.size() != 1)
            this.badgeRepeatedActivationFix(companyBadges);
        // 数据正常
        return badgeMapper.selectById(companyBadges.get(0).getBadgeId());
    }

mybatis映射:

public interface CompanyBadgeMapper extends baseMapper {

}

数据库设计:

现象

尝试使用较小的数字查询时,查询正常,一旦使用自增的雪花id就显示超出限制并且类型为Integer;可我明明是Long类型

解决

多次尝试无果后,我渐渐删除多余的东西,当我删除pojo中的构造

public CompanyBadge(Long companyId, Integer isEnable) {
        this.companyId = companyId;
        this.isEnable = isEnable;
    }

查询正常,,,,之前为了生产测试数据方便遗留的构造;;

限制就是不清楚为什么这个构造会导致查询的时候显示大小超出最大值,并且把companyId属性的Long类型映射成了Integer类型,
并且当我把唯一的一个IsEnable也设置成Long的时候问题也解决了,又是因为什么造成这两个的类型错乱了呢,,,,求大佬告知

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/682709.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号