偶然发现,Spring Boot集成jpa编写实体类的时候,默认使用的命名策略是下划线分隔的字段命名。

Spring Boot版本:1.5.4.release

数据表:

id int,
userName varchar(50)

那么如下的映射:

@Data
@Entity
@Table(name="t_users")
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain=true)
public class User {
@Id
@GeneratedValue
private Integer id;
private String userName;
}

会发现,数据库里增加了一个字段”user_name”,那么是否可以推测spring boot jpa使用的默认策略是ImprovedNamingStrategy?

由于测试用例的表已经存在,之前使用的是DefaultNamingStrategy,即字段名和属性名相同,也是驼峰式。

好吧,我自己关联:

@Data
@Entity
@Table(name="t_users")
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain=true)
public class User {
@Id
@GeneratedValue
private Integer id;
@Column(name="userName")
private String userName;
}

有问题了,没有效果。

难道Column注解无效?尝试:

@Column(name="yong_hu_ming")
private String userName;

这回有效果了,有了一个新字段 “yong_hu_ming”,column注解有效果呀。

难道是userName这个单词,我再做一个字段:

private String passWord;

重复之前的操作,依然是同样的结果。

也就是说,如果Column注解定义的字段名和属性名一样,会被忽略。奇怪的设计。

像Hibernate4一样,配置一下命名策略:

spring.jpa.hibernate.naming.strategy=org.hibernate.cfg.DefaultNamingStrategy

没有效果。

想起一件事,记得Hibernate5的命名策略有过调整,”spring.jpa.hibernate.naming.strategy” 没效果了:

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

这次有效了:

@Column(name="userName")
private String userName;

数据表里可以关联到userName字段了。

当然,ImprovedNamingStrategy策略是比较好的方式,只不过,自动映射对于兼容已有的数据表,需要注意一下。如果全新设计,大可放心使用。

Spring Boot集成JPA的Column注解命名字段无效的问题的更多相关文章

  1. Spring Boot 集成 JPA 的步骤

    Spring Boot 集成 JPA 的步骤 配置依赖 compile group: 'org.springframework.boot', name: 'spring-boot-starter-da ...

  2. spring boot集成swagger,自定义注解,拦截器,xss过滤,异步调用,guava限流,定时任务案例, 发邮件

    本文介绍spring boot集成swagger,自定义注解,拦截器,xss过滤,异步调用,定时任务案例 集成swagger--对于做前后端分离的项目,后端只需要提供接口访问,swagger提供了接口 ...

  3. Spring boot 搭配 JPA 生成表注释 和 字段注释

    原文地址:https://blog.csdn.net/qq_39996837/article/details/84717748 由于在数据库表反向生成过程中呢,需要通过jpa自动生成表,并且这个表必须 ...

  4. Spring Boot JPA的Column Table 注解命名字段无效

    @Table(name = "OrderInfo") @Entity public class OrderInfo { @Id @GeneratedValue private Lo ...

  5. spring boot 集成 Mybatis,JPA

    相对应MyBatis, JPA可能大家会比较陌生,它并不是一个框架,而是一组规范,其使用跟Hibernate 差不多,原理层面的东西就不多讲了,主要的是应用. Mybatis就不多说了,SSM这三个框 ...

  6. Lombok安装及Spring Boot集成Lombok

    文章目录 Lombok有什么用 使用Lombok时需要注意的点 Lombok的安装 spring boot集成Lombok Lombok常用注解 @NonNull @Cleanup @Getter/@ ...

  7. 【实验一 】Spring Boot 集成 hibernate & JPA

    转眼间,2018年的十二分之一都快过完了,忙于各类事情,博客也都快一个月没更新了.今天我们继续来学习Springboot对象持久化. 首先JPA是Java持久化API,定义了一系列对象持久化的标准,而 ...

  8. 【spring boot】14.spring boot集成mybatis,注解方式OR映射文件方式AND pagehelper分页插件【Mybatis】pagehelper分页插件分页查询无效解决方法

    spring boot集成mybatis,集成使用mybatis拖沓了好久,今天终于可以补起来了. 本篇源码中,同时使用了Spring data JPA 和 Mybatis两种方式. 在使用的过程中一 ...

  9. Spring boot data JPA数据库映射关系 : @OneToOne,@OneToMany,@ManyToMany

    问题描述 在利用Spring boot data JPA进行表设计的时候,表对象之间经常存在各种映射关系,如何正确将理解的映射关系转化为代码中的映射关系是关键之处. 解决办法 概念理解 举例:在公司的 ...

随机推荐

  1. javascript数组(五)

    一.创建数组.数组操作 数组是指的有序集合.每个值叫做元素,每个元素,每个元素在数组中都有梳子位置编号,也就是索引.JS中数组是弱类型的,数组中可以含有不同类型的元素.数组元素甚至可以是对象或其它数组 ...

  2. CDOJ 1960 构造哈密顿路径

    题意: 给定n个点的有向完全图,希望通过其中n-1条边将n个点串起来(2<=n<=1000) 欧拉路径:经过所有边且只经过一次 哈密顿路径:经过所有点且只经过一次 思路: 本题条件特殊,有 ...

  3. python之PIL 二值图像处理和保存

    0. 1.参考 http://pszpcl.baike.com/article-77327.htmlwindows 图片右键:属性 详细信息 位深度位深度 用于指定图像中的每个像素可以使用的颜色信息数 ...

  4. RequireJS跨域加载html模版后被转成JS问题分析及解决

    问题描述 RequireJS跨域加载HTML模版失败,例如: 在a.com域名下请求CDN域名下的模版,text.js插件会把html文件转成html.js文件去加载,由于并没有生成html.js文件 ...

  5. C# 之 Structure 和 Class的区别

    一.类与结构的示例比较: 结构示例: public struct Person { string Name; int height; int weight public bool overWeight ...

  6. Spring Boot配置文件放在jar外部

    Spring Boot程序默认从application.properties或者application.yaml读取配置,如何将配置信息外置,方便配置呢? 查询官网,可以得到下面的几种方案: 通过命令 ...

  7. Java基础总结02:环境变量的配置

    (一)Windows系统下配置环境变量 ※在"系统变量"中设置3项属性JAVA_HOME.PATH.CLASSPATH(JDK1.5之后此项属性不必再配),若已存在则点击" ...

  8. 065 updateStateByKey的函数API

    一:使用场景 1.应用场景 数据的累加 一段时间内的数据的累加 2.说明 每个批次都输出自己批次的数据, 这个时候,可以使用这个API,使得他们之间产生联系. 3.说明2 在累加器的时候,起到的效果和 ...

  9. 初窥Java之五

    一.方法 1.语法格式 修饰符  返回值类型 方法名(形参列表){ 方法体 } 2.返回值类型 返回值类型可以时:1.void(无返回值) 2.8大基本数据类型中的任意一种 3.引用数据类型中的任意一 ...

  10. Flume的概述和安装部署

    一.Flume概述 Flume是一种分布式.可靠且可用的服务,用于有效的收集.聚合和移动大量日志文件数据.Flume具有基于流数据流的简单灵活的框架,具有可靠的可靠性机制和许多故障转移和恢复机制,具有 ...