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

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

作者: 张培_ | 来源:发表于2017-09-25 21:18 被阅读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 即可

    相关文章

      网友评论

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

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