news 2026/7/2 8:04:52

3. 关键要点:添加`id`后建议给原有联合字段加唯一索引,确保业务数据不重复;实体类需同步添加`id`字段并标记`@TableId`注解。

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
3. 关键要点:添加`id`后建议给原有联合字段加唯一索引,确保业务数据不重复;实体类需同步添加`id`字段并标记`@TableId`注解。
数据库查询失败,nested exception is org.apache.ibatis.exceptions.PersistenceException:### Error querying database. Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, Error SQL: SELECT survey_year,division_code,natural_village,province,city,county,county_code,town,town_code,village_community ,id FROM ln_kashin_beck_main ORDER BY ### Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, Error SQL: SELECT survey_year,division_code,natural_village,province,city,county,county_code,town,town_code,village_community ,id FROM ln_kashin_beck_main ORDER BY添加主键,id varchar(255)

你希望通过ln_kashin_beck_main表添加id字段作为主键来解决这个查询异常,核心是让MyBatis-Plus能找到对应的id主键列,同时解决ORDER BY空字段的问题,这样生成的SQL就会合法可执行。

下面我帮你完成表结构修改(添加id字段)、更新建表语句,同时补充对应的查询代码修正,彻底解决这个问题。

一、核心修改思路

  1. ln_kashin_beck_main表添加id字段,设为VARCHAR(255)类型、非空、主键(也可设为自增,更贴合MyBatis-Plus默认习惯)。
  2. 保留原有联合字段(survey_yeardivision_codenatural_village),确保业务逻辑不变,仅新增id作为MyBatis-Plus识别的主键。
  3. 修正SQL中的ORDER BY,补充排序字段(优先用新增的id,或原有业务字段)。

二、方案1:直接修改现有表(已创建表,保留数据)

如果表已经在数据库中存在(有数据),用ALTER TABLE语句添加id字段,无需重建表,不丢失现有数据。

-- 给现有表添加id字段,设为VARCHAR(255)、非空、主键-- 若需要手动赋值id,执行此语句(后续插入数据需手动指定id值)ALTERTABLE`ln_kashin_beck_main`ADDCOLUMN`id`VARCHAR(255)NOTNULLFIRSTCOMMENT'主键ID,适配MyBatis-Plus查询',ADDPRIMARYKEY(`id`);-- (可选优化)若想让id自增(更方便,无需手动赋值),建议改为INT类型自增(推荐)-- 先删除上面的语句,执行此语句(更贴合MyBatis-Plus默认主键习惯)ALTERTABLE`ln_kashin_beck_main`ADDCOLUMN`id`INTNOTNULLAUTO_INCREMENTFIRSTCOMMENT'主键ID,自增,适配MyBatis-Plus查询',ADDPRIMARYKEY(`id`);-- 补充:原有联合字段建议添加唯一索引,确保业务唯一性(避免重复数据)ALTERTABLE`ln_kashin_beck_main`ADDUNIQUEINDEX`idx_unique_main`(`survey_year`,`division_code`,`natural_village`)COMMENT'联合唯一索引,确保同村同年份数据不重复';
  • 说明:FIRST表示id字段排在表的第一列,不影响其他字段顺序;添加唯一索引是为了替代原有联合主键的业务唯一性约束。

三、方案2:新建带id字段的表(全新表,无历史数据)

如果是新建表,直接使用下面的建表语句,包含id字段,适配MyBatis-Plus查询。

CREATETABLE`ln_kashin_beck_main`(-- 新增id字段,VARCHAR(255),非空,主键(适配MyBatis-Plus)`id`VARCHAR(255)NOTNULLCOMMENT'主键ID,适配MyBatis-Plus查询',-- 原有核心关联字段(保留业务逻辑)`survey_year`VARCHAR(255)NOTNULLCOMMENT'调查年份(信息铺入,不需要输入,只可选择)',`division_code`VARCHAR(255)NOTNULLCOMMENT'行政区划代码(选择行政村后自动填充,无需录入,已铺入所有行政村代码)',`natural_village`VARCHAR(255)NOTNULLCOMMENT'自然村(屯)(已铺入全部自然村名称,可选择也可手动输入)',-- 原有基础行政区划附加字段`province`VARCHAR(255)NOTNULLCOMMENT'省(信息铺入,不需要输入,只可选择)',`city`VARCHAR(255)NOTNULLCOMMENT'市(信息铺入,不需要输入,只可选择)',`county`VARCHAR(255)NOTNULLCOMMENT'县(信息铺入,不需要输入,只可选择)',`county_code`VARCHAR(255)NOTNULLCOMMENT'县代码(选择县区后自动填充,无需录入,已铺入所有县区代码)',`town`VARCHAR(255)NOTNULLCOMMENT'乡(镇)(信息铺入,不需要输入,只可选择)',`town_code`VARCHAR(255)NOTNULLCOMMENT'乡(镇)代码(选择乡镇后自动填充,无需录入,已铺入所有乡镇代码)',`village_community`VARCHAR(255)NOTNULLCOMMENT'行政村/社区(信息铺入,不需要输入,只可选择)',-- 主键约束(id作为主键),新增联合唯一索引确保业务唯一性PRIMARYKEY(`id`)COMMENT'主键:id,适配MyBatis-Plus查询',UNIQUEINDEX`idx_unique_main`(`survey_year`,`division_code`,`natural_village`)COMMENT'联合唯一索引:确保同调查年份+行政区划+自然村记录不重复')ENGINE=InnoDBDEFAULTCHARSET=utf8mb4 ROW_FORMAT=DYNAMICCOMMENT='大骨节病防治信息主表(基础行政区划信息)';

四、修正MyBatis-Plus实体类(适配id字段)

更新实体类,添加id字段,标记为MyBatis-Plus主键,确保查询时能正确映射。

importcom.baomidou.mybatisplus.annotation.TableId;importcom.baomidou.mybatisplus.annotation.TableName;importlombok.Data;@Data@TableName("ln_kashin_beck_main")// 对应数据库表名publicclassLnKashinBeckMain{// 新增id字段,标记为MyBatis-Plus主键@TableId(value="id")// 对应数据库表的id字段privateStringid;// 若id是INT自增,改为private Integer id;// 原有业务字段(保留不变)privateStringsurveyYear;privateStringdivisionCode;privateStringnaturalVillage;privateStringprovince;privateStringcity;privateStringcounty;privateStringcountyCode;privateStringtown;privateStringtownCode;privateStringvillageCommunity;}

五、修正查询代码(解决ORDER BY空字段问题)

添加id字段后,还需补充ORDER BY的排序字段,避免生成空排序语句,下面给出合法的查询示例。

示例1:基础查询(按id排序)

importcom.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;importorg.springframework.stereotype.Service;importjavax.annotation.Resource;importjava.util.List;@ServicepublicclassLnKashinBeckMainService{@ResourceprivateLnKashinBeckMainMapperlnKashinBeckMainMapper;// 合法查询:按id升序排序,避免ORDER BY空字段publicList<LnKashinBeckMain>listAll(){LambdaQueryWrapper<LnKashinBeckMain>queryWrapper=newLambdaQueryWrapper<>();// 补充排序字段(id),解决ORDER BY空字段问题queryWrapper.orderByAsc(LnKashinBeckMain::getId);returnlnKashinBeckMainMapper.selectList(queryWrapper);}}

示例2:手动编写SQL(避免MyBatis-Plus自动生成错误SQL)

若仍有问题,可直接在XML映射文件中编写合法SQL,明确查询字段和排序字段。

<selectid="listAll"resultType="com.example.entity.LnKashinBeckMain">SELECT id, survey_year, division_code, natural_village, province, city, county, county_code, town, town_code, village_community FROM ln_kashin_beck_main ORDER BY id ASC;<!-- 补充排序字段id,合法有效 --></select>

六、验证问题是否解决

  1. 执行表修改语句(或新建表语句),确认ln_kashin_beck_main表中存在id字段且为主键。
  2. 重启项目,确保实体类修改生效。
  3. 调用查询方法,观察是否能正常返回数据,无异常抛出。
  4. (可选)查看MyBatis-Plus生成的SQL日志,确认SQL为合法语句(如SELECT id,survey_year,... FROM ln_kashin_beck_main ORDER BY id ASC)。

总结

  1. 本次解决问题的核心是给表添加id字段作为主键,适配MyBatis-Plus的默认主键查询规则,解决「查询不存在id列」的问题。
  2. 同时补充ORDER BY的具体排序字段(优先id),解决「空排序语句」的语法错误。
  3. 关键要点:添加id后建议给原有联合字段加唯一索引,确保业务数据不重复;实体类需同步添加id字段并标记@TableId注解。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/28 23:13:50

uni-app 之 设置导航

uni-app 提供了一系列 API 来动态设置页面导航栏的样式和状态&#xff0c;帮助开发者创建更丰富的用户界面体验。 1. uni.setNavigationBarTitle(OBJECT) 动态设置当前页面的标题 参数说明 属性类型必填说明titlestring是页面标题successfunction否接口调用成功的回调函数f…

作者头像 李华
网站建设 2026/6/26 16:15:57

光刻胶用屏蔽剂

一、光刻胶对光屏蔽剂性能的具体详细要求光屏蔽剂的核心作用是控制光在光刻胶膜中的传播行为&#xff0c;其主要性能要求可归纳为以下几点&#xff1a;精确的光学特性&#xff08;核心要求&#xff09;在曝光波长下具有高吸收系数&#xff08;α&#xff09;&#xff1a;这是最…

作者头像 李华
网站建设 2026/6/30 3:55:10

<span class=“js_title_inner“>1篇搞懂AI通识:大白话拆解核心点</span>

引言随着 AI 技术从实验室走向日常&#xff0c;“机器学习”“大模型”“Transformer”“MOE” 等词汇已不再是技术圈的专属。从智能聊天助手到电商推荐&#xff0c;从语音识别到自动驾驶&#xff0c;AI 正以多元形态融入生活。这篇文章按 “基础→核心→优化→落地→工具→术语…

作者头像 李华
网站建设 2026/7/2 0:18:51

which命令

which命令&#xff0c;查看所使用的一系列命令的程序文件存放在哪里语法:which要查找的命令find 用于查找指定的文件按文件名查找:find起始路径 -name"被查找文件名"支持通配符按文件大小查找:find 起始路径-size1-n[kMG]

作者头像 李华
网站建设 2026/7/2 1:43:52

<span class=“js_title_inner“>ZYNQ MPSOC VCU介绍</span>

1 什么是VCU?VCU 的全称是 Video Codec Unit&#xff0c;即视频编解码单元&#xff0c; Zynq UltraScale MPSoC 系列产品分为三种类型&#xff0c;分别是 CG 型器件、 EG 型器件和 EV 型器件&#xff0c; 其中只有 EV 型器件集成了 VCU。 VCU 适用于视频监控和网络视频连接应用…

作者头像 李华
网站建设 2026/7/1 17:30:14

企业级社区养老服务系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】

摘要 随着人口老龄化进程的加快&#xff0c;社区养老服务需求日益增长&#xff0c;传统的养老服务模式已难以满足现代社会的需求。社区养老服务系统的数字化、智能化成为提升服务效率和质量的关键。企业级社区养老服务系统通过整合资源、优化管理流程&#xff0c;为老年人提供便…

作者头像 李华