1、首先在Entity实体中,命名方式有两种;
一种是显示命名,即通过@Table的name属性指定对应的数据库表名称,@Column的name属性指定实体字段对应数据库字段的名称。
另一种是隐式命名,显示命名一般不是必要的,所以可以不设置名称,交给框架来进行隐式命名。 2、Naming命名策略
我们通过spring-boot-autoconfigure中的spring.factories可以找到自动配置类org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration。

    

    

    该自动配置类引入JpaBaseConfiguration的实现类HibernateJpaConfiguration来进行hibernate相关的jpa配置;
        在JpaBaseConfiguration配置entityManagerFactory时,调用了getVendorProperties方法来获取供应商属性,
    
该方法由HibernateJpaConfiguration实现,当中调用了HibernateProperties的determineHibernateProperties方法,根据标准的JPA属性和Hibernate设置,确定主Hibernate EntityManagerFactory初始化的配置属性。
    
继续往下走到Naming的applyNamingStrategies应用命名策略可以知道,如果我们不配置命名策略的话,默认由SpringImplicitNamingStrategy和SpringPhysicalNamingStrategy分两个阶段共同完成命名,
先走SpringImplicitNamingStrategy再走SpringPhysicalNamingStrategy。
    

     

 命名策略分两步走:

    第一步:如果我们没有使用@Table或@Column指定了表或字段的名称,则由SpringImplicitNamingStrategy为我们隐式处理,表名隐式处理为类名,列名隐式处理为字段名。如果指定了表名列名,SpringImplicitNamingStrategy不起作用。
第二步:将上面处理过的逻辑名称解析成物理名称。无论在实体中是否显示指定表名列名,SpringPhysicalNamingStrategy都会被调用。 所以如果我们想要自定义命名策略,可以根据自己的需求选择继承二者,并在配置文件中通过spring.jpa.hibernate.naming.implicit-strategy 或 spring.jpa.hibernate.naming.physical-strategy 进行指定自己的策略(例如为表名添加指定前缀)。
/**
* 自定义命名策略
*
* @author caofanqi
*/
public class MySpringPhysicalNamingStrategy extends SpringPhysicalNamingStrategy { /**
* 为表添加指定前缀
*/
@Override
public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment jdbcEnvironment) {
return super.toPhysicalTableName(new Identifier("cfq_" + name.getText(),name.isQuoted()), jdbcEnvironment);
} }

  

源码地址:https://github.com/caofanqi/study-spring-data-jpa
 

最新文章

  1. 修改MySQL默认字符集编码
  2. <s:property value=""/> 怎么截取返回值的固定长度的字符串
  3. Struts2与Ajax的整合
  4. android studio只能全部提示设置
  5. visualC/C++连接MySql数据库
  6. jQuery中$符号冲突问题 (转载)
  7. Chapter 1 First Sight——36
  8. ngRx 官方示例分析 - 1. 介绍
  9. Dynamics CRM2016 新功能之从CRM APP通过电子邮件发送页面链接
  10. Chrome部分站点无法启用Flash问题
  11. configure.in详解
  12. unity admob
  13. java中double和float精度丢失问题
  14. 回顾经典问题算法:LIS, LCS-(DP类别)
  15. [Z]LaTeX入门教程
  16. go 语言介绍
  17. log(A/B) = logA -logB
  18. SecureCRT连接VMWare中Linux
  19. 【244】◀▶IEW-Unit09
  20. 长春理工大学第十四届程序设计竞赛(重现赛)L.Homework Stream

热门文章

  1. 12 IO流(九)——装饰流 BufferedInputStream/OutputStream
  2. DNS欺诈的三种简单方法总结
  3. Keil 5出现Error: L6218E: Undefined symbol解决方法
  4. Serializer组件
  5. (二)pdf的构成综述
  6. 前端开发 vue,angular,react框架对比1
  7. Linux下Java变量
  8. vue标签内循环数据逗号分隔
  9. 增强学习--TRPO算法
  10. [服务器]SSL安装证书教程