当前使用版本(必填,否则不予处理)

MP版本: 3.5.3.2 数据库: SQLServer 2016 JDK: 1.8 Springboot: 2.7.17

该问题是如何引起的?(确定最新版也有问题再提!!!)

因不同版本数据库融合, 导致新表和旧表内字段名称不一致, 新表字段全部为 小写SnakeCase, 而旧表全部为大写SnakeCase. 故要对用到的旧表做兼容, 使用 @TableField 进行字段标记.

Springboot 配置文件内, 开启驼峰自动转换(默认), 设置主键如下, 同时标记 @TableField

@TableId(type = IdType.AUTO)
@TableField("USER_ID")
private Integer userId;

期望SQL内字段名称替换结果为 USER_ID, 实际替换结果为 user_id. 当去掉 @TableId 时, 查询列表可以成功, 且SQL日志输出也替换为了 USER_ID

重现步骤(如果有就写完整)

正常配置即可重现

报错信息

同时标记 @TableId@TableField, 报错信息如下

org.springframework.jdbc.BadSqlGrammarException: 
### Error querying database.  Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 列名 'user_id' 无效。
### The error may exist in net/guodulink/tiny/server/server/UserRepository.java (best guess)
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: SELECT  user_id,ACCOUNT,PASSWORD,STATE,IS_EXA,CREATE_TIME,NAME  FROM FMS_USER_INFORMATION
### Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 列名 'user_id' 无效。
; bad SQL grammar []; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: 列名 'user_id' 无效。

Comment From: miemieYaho

都配置只生效@TableId

Comment From: ovaso

那这个算bug吗, 还是有意为之

Comment From: miemieYaho

MyBatis-Plus TableId和TableField两个注解作用同一字段时, SQL内替换错误 MyBatis-Plus TableId和TableField两个注解作用同一字段时, SQL内替换错误