Tabel或者Column使用name属性不起作用

情景描述

  • 使用flywayMigrate create table
  • table(已经生成的Table)采用驼峰方法命名(growthNote)
  • Entity中已经在类前加上了@Table(name="growthNote")
  • 调用Repsitory的find方法,报错。由于在数据库中找不到growth_notetable。

矛盾点

  • 明明已经使用注解@Table确定了table的名字,那么Repository为什么还是会到growth_note中find?

问题

  • Q1:@Table为什么没有用?
  • A1:查询资料之后得出结论,我们使用的Hibernate已经是5.1版本,也就意味着,Hibernate要求你设置hibernate.physical_naming_strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl属性,将你设置在@Table或者@Column的名称用于物理数据库,否则你将无法让你设置的命名用于数据库。

  • Q2:为什么命名会从驼峰法变成下划线的方式?
  • A2:查看herbinate官网得知An improved naming strategy that prefers embedded underscores to mixed case names,因此herbinate的默认命名策略是将驼峰变成下划线区分的方式。

  • Q3:官网推荐我们修改命名策略,设置spring.jpa.hibernate.naming-strategy=EJB3NamingStrategy为什么依旧没有作用?
  • 由于Hibernate5.1废弃了这个配置,将这个配置替换成了两个配置hibernate.physical_naming_strategy hibernate.implicit_naming_strategy

  • Q4:那么这两个配置的作用分别是什么呢?
  • A4:https://docs.jboss.org/hibernate/orm/5.1/userguide/html_single/chapters/domain/naming.html#PhysicalNamingStrategy,
    明确讲解作用。

解决方案

  • 使用@Table(name="growthNote")
  • 然后配置属性spring.jpa.herbinate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl将逻辑名称运用于物理数据表。

反思:

  • 花费很多时间去查属性以及他的值用法,一直被误解找不到最佳答案,直到最后才去官网查。

Action:

  • 遇到问题先定位出错的位置,对应哪个工具,直接去工具的官网查找解答。

你可能感兴趣的:(Tabel或者Column使用name属性不起作用)