美文网首页
Tabel或者Column使用name属性不起作用

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

作者: 张培_ | 来源:发表于2017-09-14 20:13 被阅读111次

    情景描述

    • 使用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


    解决方案

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

    反思:

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

    Action:

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

    相关文章

      网友评论

          本文标题:Tabel或者Column使用name属性不起作用

          本文链接:https://www.haomeiwen.com/subject/rgqjsxtx.html