问题所在:
### SQL: INSERT INTO `tts_record`(`id`, `user_id`, `api_key_id`, `model_id`, `model_key`, `text`, `voice`, `audio_url`, `audio_data`, `format`, `characters`, `duration`, `status`, `client_ip`, `create_time`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)Java对象:
数据库字段,数据库字段是驼峰,不是下划线的
根因:
MyBatis-Flex 的 @Column 只负责"连哪个字段",不负责"最终列名"——最终列名还要被 camelToUnderline再转一遍。@Column("userId") 只代表"我要关联字段 userId",不代表"列名就叫 userId"。
完整链条:
@Column("userId") → 告诉 Flex:用这个值当基础列名 → camelToUnderline = true → 强制转成 user_id
你以为是: @Column("userId") → 列名 userId
实际是: @Column("userId") → 临时名 userId → camelToUnderline 又转一次 → 最终列名 user_id
解决1 单个表开启
所以修掉它很简单——把 @Table 改成:
@Table(value = "tts_record", camelToUnderline = false)
这之后 @Column("userId") 才会等于它表面写的意思——列名 userId。
解决2 全局配置
column-naming-strategy: no_change
改之前的逻辑链:
@Column("userId") → 临时名 "userId" → camelToUnderline = true → 又转成 "user_id" → 最终列名
加上 no_change 后:
@Column("userId") → 直接用 "userId" → 最终列名