一、Hibernate5之前
命名策略采用naming-strategy配置项
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.DefaultNamingStrategy
1、配置值org.hibernate.cfg.DefaultNamingStrategy
hibernate默认配置,采用直接映射的方式,不会做过多的处理,当然前提是没有使用@Table和@Column注解,如果有则以注解内容为准。
2、配置值org.hibernate.cfg.ImprovedNamingStrategy
表名,字段为小写,当有大写字母的时候会添加下划线分隔符号,如:user_id。
二、Hibernate5之后
采用implicit-strategy和physical-strategy两个配置项分别控制命名策略
spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyJpaCompliantImpl
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
1、implicit-strategy和physical-strategy的区别
(1)、implicit-strategy负责模型对象层次的处理,将对象模型处理为逻辑名称。physical-strategy负责映射成真实的数据名称的处理,将上述的逻辑名称处理为物理名称。
(2)、当没有使用@Table和@Column注解时,implicit-strategy配置项才会被使用,当对象模型中已经指定时,implicit-strategy并不会起作用。physical-strategy一定会被应用,与对象模型中是否显式地指定列名或者已经被隐式决定无关。
2、implicit-strategy逻辑名称命名策略
有五个配置值:
org.hibernate.boot.model.naming.ImplicitNamingStrategyJpaCompliantImpl
org.hibernate.boot.model.naming.ImplicitNamingStrategyComponentPathImpl
org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl
org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
默认为ImplicitNamingStrategyJpaCompliantImpl,后四者均继承自它。
3、physical-strategy物理名称命名策略
有两个配置值:
默认为SpringPhysicalNamingStrategy
#直接映射,不会做过多的处理
org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
#表名,字段为小写,当有大写字母的时候会添加下划线分隔符号
org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy