实体类的命名策略修改(下划线方式转为驼峰法)

现象

  • 调用repository中的方法,通常需要对table进行增删改查
  • 我们通过flyway 创建一个数据库,以及创建table
  • 但是程序运行到repository.xxmethod就会报错database.tableName notfound

矛盾点

  • repository获取tableName的方式未知,而table的创建又是由我们手动进行,tableName也是由我们自己创建。如果假定repository是从entity类名获取tableName。那么就出现问题:
    • 1.entity 类名必须首字母大写但是我们希望我们的tableName小写开头怎么办?
    • 2.entity的类名并不是repository寻找的tableName又是为什么?

我们的数据库是如何创建的?spring data jpa怎么知道要连接那个数据库?有没有办法通过代码自己创建数据库?

  • 因为我们的mysql是在docker中启动的而且已经创建数据库。而对于代码本身,获取数据库的名字很简单通过在application.yml中定义spring.datasource.url:jdbc:mysql://localhost:port/databaseName而我们也可以通过flyway create 数据库。

那么什么决定了repository访问的table的名字?

  • 第一部分:Entity的命名
  • 第二部分:以及命名策略

我们可以确定自己给实体类的类名定义,但是命名策略如何确定?

  • 默认的命名策略是:单词之间使用下划线分隔。但是我们通常会使用驼峰法命名。
  • application.yml中定义
  • spring.jpa.hibernate.naming.physical-strategy = org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl 可以设置table的命名遵照驼峰但是首字母大写。

由于Entity的className首字母大写,因此我们的table命名首字母就要大写。此时该如何将命名改成首字母小写并且驼峰呢?

  • 只能使用@Table注解
@Table(name="growthNote")
  • 然后设置命名策略
  • hibernate.physical_naming_strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl 即可

你可能感兴趣的:(实体类的命名策略修改(下划线方式转为驼峰法))