当前位置: 首页 > news >正文

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注解。
http://www.jsqmd.com/news/336045/

相关文章:

  • uni-app 之 uni.showActionSheet
  • <span class=“js_title_inner“>嵌入式Linux相机学习</span>
  • <span class=“js_title_inner“>音视频编解码常用知识点,内容比较全 【建议收藏】</span>
  • Vue3 动态路由在生产环境才出现白屏的排查与解决(keep-alive 踩坑实录)
  • uni-app 之 设置导航
  • 2026年靠谱的过滤器/耐高温高效过滤器厂家实力参考 - 行业平台推荐
  • <span class=“js_title_inner“>VB.NET和VBA教程-如何查找Excel数据区域边界</span>
  • 手把手实现红黑树Set和Map
  • 2026年质量好的空气过滤器/初效平板式过滤器全方位厂家推荐参考 - 行业平台推荐
  • <span class=“js_title_inner“>在 VB.NET 中,LINQ如何统计列表类型“List(Of String())”</span>
  • <span class=“js_title_inner“>并行工作流(Parallelization Workflow)【智能体开发模式】</span>
  • <span class=“js_title_inner“>C程序用的C11标准,库还是C99的,会不会有兼容性问题?</span>
  • <span class=“js_title_inner“>【Java 25】Class-File API,解析、生成和转换 Java 字节码的标准 API</span>
  • <span class=“js_title_inner“>[今日战况]创新高了!黄金有色吃大肉!ETF三因子轮动实盘跟踪!股票量化分析工具QTYX-V3.3.6</span>
  • <span class=“js_title_inner“>彻底爆了!阿里最新大模型,再次拿下第一!</span>
  • <span class=“js_title_inner“>[NEW]六边形量化框架升级,全自动三因子轮动策略!股票量化分析工具QTYX-V3.3.5</span>
  • <span class=“js_title_inner“>对话段永平:做自己能够喜欢的事情很重要</span>
  • <span class=“js_title_inner“>支配树算法原理及鸿蒙工具实践</span>
  • 2026年口碑好的柬埔寨至东莞国际物流专线/东莞至柬埔寨国际物流专线往返综合情况汇总 - 行业平台推荐
  • 2026年知名的柬埔寨老拗至东莞国际物流专线/金瑞通国际物流专线服务情况参考 - 行业平台推荐
  • <span class=“js_title_inner“>AI也“做梦”和“减肥”?一文读懂大模型的幻觉与蒸馏</span>
  • Cybersecurity AI (CAI) AI 时代的网络安全自动化框架
  • 【工具】Python解释器和PyCharm的安装与使用
  • 2026年靠谱的威海法律咨询律师事务所/威海金融律师事务所本地选择建议榜 - 行业平台推荐
  • 2026年比较好的威海法律咨询律师事务所/威海离婚律师事务所本地口碑推荐榜 - 行业平台推荐
  • 2026年热门的储能/电化学储能厂家推荐必看 - 行业平台推荐
  • 2026年,如何甄选一家诚信可靠的工程石材供应商? - 2026年企业推荐榜
  • 2026年评价高的混合储能/西安石油矿山储能厂家信誉综合参考 - 行业平台推荐
  • 树莓派5+ubuntu24.04+openclaw使用记录
  • 2026年知名的西安长循环寿命电池/液流电池用户口碑认可参考(高评价) - 行业平台推荐