跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
Javajava

Spring Data 实体属性命名避坑:MySQL 保留关键字处理

Spring Data 项目中直接使用 MySQL 保留关键字(如 condition)作为实体属性名,会导致生成的 SQL 语句语法错误。解决该问题主要有两种方案:一是在原生 SQL 查询中使用反引号包裹字段名;二是通过 @Column 注解将属性映射到合法的数据库列名。推荐采用注解映射方式,既保持代码可读性又规避底层风险。附常用保留关键字列表供参考。

beaabea发布于 2018/12/28更新于 2026/4/241 浏览
Spring Data 实体属性命名避坑:MySQL 保留关键字处理

Spring Data 实体属性命名避坑:MySQL 保留关键字处理

在使用 Spring Data 构建项目时,经常遇到将 MySQL 保留字直接用作实体属性的情况。比如 condition,这会导致 Hibernate/Spring Data 生成的 SQL 出现语法错误。

问题背景

项目中用 Spring Data 将 CONDITION 作为属性名时,SQL 报错是常见现象。这是因为 ORM 框架在生成查询语句时,会直接将属性名映射为列名,而保留字在 SQL 解析阶段会被视为指令而非标识符。

解决方案

方案一:原生 SQL 转义

如果必须使用原生 SQL,记得加反引号包裹字段名。例如:

SELECT name, `condition` FROM products WHERE id = ?

注意:这里建议使用预编译参数(如 ?)代替字符串拼接,避免 SQL 注入风险。

方案二:JPA 注解映射(推荐)

更优雅的方式是通过 @Column 注解将属性映射到合法的数据库列名。这样代码中的属性名可以保持语义化,而底层数据库列名则规避了冲突。

/**
 * 备件状态
 */
@Column(name = "materialCondition")
private String condition;

这种方式既保持了 Java 代码的可读性,又确保了数据库交互的稳定性,是生产环境的首选方案。

常见保留关键字表

以下是 MySQL 常见的保留关键字列表,开发时请尽量避免直接使用这些词作为表名或字段名。

ADDALLALTER
ANALYZEANDAS
ASCASENSITIVEBEFORE
BETWEENBIGINTBINARY
BLOBBOTHBY
CALLCASCADECASE
CHANGECHARCHARACTER
CHECKCOLLATECOLUMN
CONDITIONCONNECTIONCONSTRAINT
CONTINUECONVERTCREATE
CROSSCURRENT_DATECURRENT_TIME
CURRENT_TIMESTAMPCURRENT_USERCURSOR
DATABASEDATABASESDAY_HOUR
DAY_MICROSECONDDAY_MINUTEDAY_SECOND
DECDECIMALDECLARE
DEFAULTDELAYEDDELETE
DESCDESCRIBEDETERMINISTIC
DISTINCTDISTINCTROWDIV
DOUBLEDROPDUAL
EACHELSEELSEIF
ENCLOSEDESCAPEDEXISTS
EXITEXPLAINFALSE
FETCHFLOATFLOAT4
FLOAT8FORFORCE
FOREIGNFROMFULLTEXT
GOTOGRANTGROUP
HAVINGHIGH_PRIORITYHOUR_MICROSECOND
HOUR_MINUTEHOUR_SECONDIF
IGNOREININDEX
INFILEINNERINOUT
INSENSITIVEINSERTINT
INT1INT2INT3
INT4INT8INTEGER
INTERVALINTOIS
ITERATEJOINKEY
KEYSKILLLABEL
LEADINGLEAVELEFT
LIKELIMITLINEAR
LINESLOADLOCALTIME
LOCALTIMESTAMPLOCKLONG
LONGBLOBLONGTEXTLOOP
LOW_PRIORITYMATCHMEDIUMBLOB
MEDIUMINTMEDIUMTEXTMIDDLEINT
MINUTE_MICROSECONDMINUTE_SECONDMOD
MODIFIESNATURALNOT
NO_WRITE_TO_BINLOGNULLNUMERIC
ONOPTIMIZEOPTION
OPTIONALLYORORDER
OUTOUTEROUTFILE
PRECISIONPRIMARYPROCEDURE
PURGERAID0RANGE
READREADSREAL
REFERENCESREGEXPRELEASE
RENAMEREPEATREPLACE
REQUIRERESTRICTRETURN
REVOKERIGHTRLIKE
SCHEMASCHEMASSECOND_MICROSECOND
SELECTSENSITIVESEPARATOR
SETSHOWSMALLINT
SPATIALSPECIFICSQL
SQLEXCEPTIONSQLSTATESQLWARNING
SQL_BIG_RESULTSQL_CALC_FOUND_ROWSSQL_SMALL_RESULT
SSLSTARTINGSTRAIGHT_JOIN
TABLETERMINATEDTHEN
TINYBLOBTINYINTTINYTEXT
TOTRAILINGTRIGGER
TRUEUNDOUNION
UNIQUEUNLOCKUNSIGNED
UPDATEUSAGEUSE
USINGUTC_DATEUTC_TIME
UTC_TIMESTAMPVALUESVARBINARY
VARCHARVARCHARACTERVARYING
WHENWHEREWHILE
WITHWRITEX509
XORYEAR_MONTHZEROFILL

目录

  1. Spring Data 实体属性命名避坑:MySQL 保留关键字处理
  2. 问题背景
  3. 解决方案
  4. 方案一:原生 SQL 转义
  5. 方案二:JPA 注解映射(推荐)
  6. 常见保留关键字表
  • 💰 8折买阿里云服务器限时8折了解详情
  • 💰 8折买阿里云服务器限时8折购买
  • 🦞 5分钟部署阿里云小龙虾了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog

更多推荐文章

查看全部
  • WebGIS 技术实战与多领域应用成果展示
  • C 语言基础:形参与实参详解,手动实现 pow 函数
  • 宏智树 AI:基于 ChatGPT 学术版的智能写作平台
  • AI 产品经理核心技能体系与职业成长路径
  • AI 辅助编程工具对比:Copilot、Cursor、Claude Code 与 Codex 深度解析
  • 本周 GitHub 爆火!10 个开源神器,彻底改变你的 AI 开发效率
  • 基于 Leaflet 的 WebGIS 省域区县天气可视化实现
  • MeterSphere:新一代开源持续测试平台
  • Docker Desktop 在 Windows 上的安装与配置指南
  • 基于 Claude Code 的 AI 内容创作自动化工作流实践
  • 从 ChatGPT 到 AIGC:智能创作与应用赋能深度解析
  • 生物医学 Go 编程:高性能计算与精准医疗实战案例 (一)
  • 本地 AI Agent 平台实战:DeerFlow Windows 全栈部署与架构解析
  • OpenClaw iOS/Android 端部署教程:语音唤醒与随身 AI 助手
  • AI 编程实战:Superpowers Skills 与 OpenSpec 协同工作流指南
  • OpenClaw 入门指南:从零部署到核心原理与实操
  • Redis 与分布式架构入门:从单机到微服务的演进之路
  • Nginx 安全加固与 HTTPS 部署实战
  • 希尔排序算法详解:原理、实现与优化
  • C++ 模板初阶:从函数重载到泛型编程的优雅过渡

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online