实体类的命名策略修改(下划线方式转为驼峰法)
2017-09-25 本文已影响573人
张培_
现象
- 调用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 即可