You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Kotlin data class(Room实体)中如何将保留关键字设为列名?

解决方案

核心问题:你当前用反引号包裹abstract仅解决了Kotlin语法层面的保留关键字冲突,但是Room生成SQL语句时会默认将字段名作为列名,而abstract同时也是SQL的保留关键字,直接生成的SQL会触发语法错误。

方案1:指定自定义列名(最推荐)

给字段加@ColumnInfo注解指定非关键字的列名,既避免SQL关键字冲突,也不影响Kotlin代码中字段的使用,修改后的对应字段代码如下:

@ColumnInfo(name = "article_abstract") // 自定义数据库列名,避开保留字
val `abstract`: String?="",

这种方式下,Kotlin代码中仍然用article.abstract``访问字段,数据库实际存储的列名为article_abstract,完全规避所有关键字冲突问题。

方案2:强制使用abstract作为列名

如果业务要求必须保留abstract作为数据库列名,可在@ColumnInfo的name属性中给列名包裹反引号,让SQL引擎识别为列名而非关键字:

@ColumnInfo(name = "`abstract`") // 给列名加反引号,告知SQL这是字段名
val `abstract`: String?="",

也可以用双引号包裹,SQLite同样支持:

@ColumnInfo(name = "\"abstract\"")

补充说明

所有Kotlin保留关键字用作Room实体字段名时,都可以用以上两种方式解决存储冲突,优先选择方案1,自定义列名可读性更强,后续写SQL查询、维护表结构时不需要额外处理关键字兼容问题。

内容的提问来源于stack exchange,提问作者DroidBee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 01:06:07