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

Spring JPA保存实体至MariaDB时列名不匹配问题咨询

JPA自动生成tag_name列名的原因

你的实体类中定义的tagName属性,JPA(以Hibernate为例)会通过默认的命名策略自动将驼峰命名转换为下划线分隔的数据库列名,也就是把tagName转成了tag_name,这就是为什么框架会尝试操作这个不存在的列。

具体逻辑

JPA默认使用的命名策略(比如SpringPhysicalNamingStrategy)会做以下转换:

  • 实体类属性的驼峰命名(如tagName)→ 数据库列名的小写下划线格式(tag_name)
  • 实体类名的驼峰命名→ 数据库表名的小写下划线格式

解决方式

如果想让属性名和数据库列名保持一致,有两种方案:

  1. 给属性添加@Column注解指定列名:
public class Tag {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Column(name = "tagName") // 指定数据库列名
    private String tagName;

    @JsonIgnore
    @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "tags")
    private Set<Board> boards = new HashSet<>();
}
  1. 修改全局配置,关闭驼峰转下划线的规则(以Spring Boot为例),在application.properties中添加:
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 01:31:04