使用Spring Boot的Hibernate字段命名

2023/05/18

1. 简介

在这个简短的教程中,我们将了解如何在Spring Boot应用程序中使用Hibernate命名策略

2. Maven依赖

如果我们从基于Maven的Spring Boot应用程序开始,并且乐于接受Spring Data,那么我们只需要添加Spring Data JPA依赖项:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

此外,我们需要一个数据库,因此我们将使用内存数据库H2

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>

Spring Data JPA依赖项为我们引入了Hibernate依赖项。

3. Spring Boot命名策略

Hibernate使用物理策略和隐式策略映射字段名称。我们之前在本教程中讨论了如何使用命名策略。

而且,Spring Boot为两者提供默认值:

  • spring.jpa.hibernate.naming.physical-strategy默认为org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
  • spring.jpa.hibernate.naming.implicit-strategy默认为org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy

我们可以覆盖这些值,但默认情况下,这些将:

  • 用下划线替换点
  • 将骆驼大小写更改为蛇形大小写,并且
  • 小写表名

因此,例如,一个AddressBook实体将被创建为address_book表。

4. 命名策略实践

如果我们创建一个Account实体:

@Entity
public class Account {
    @Id
    private Long id;
    private String defaultEmail;
}

然后在我们的属性文件中打开一些SQL调试:

hibernate.show_sql: true

启动时,我们会在日志中看到以下创建语句:

Hibernate: create table account (id bigint not null, default_email varchar(255))

正如我们所看到的,这些字段使用蛇形大小写并且是小写的,遵循Spring约定。

请记住,在这种情况下,我们不需要指定物理策略或隐式策略属性,因为我们接受默认值

5. 自定义策略

因此,假设我们想要使用JPA 1.0中的策略。

我们只需要在我们的属性文件中指明它:

spring:
    jpa:
        hibernate:
            naming:
                physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
                implicit-strategy: org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl

或者,将它们公开为@Bean:

@Bean
public PhysicalNamingStrategy physical() {
    return new PhysicalNamingStrategyStandardImpl();
}

@Bean
public ImplicitNamingStrategy implicit() {
    return new ImplicitNamingStrategyLegacyJpaImpl();
}

无论哪种方式,如果我们使用这些更改运行我们的示例,我们将看到一个略有不同的DDL语句:

Hibernate: create table Account (id bigint not null, defaultEmail varchar(255), primary key (id))

正如我们所看到的,这次这些策略遵循JPA 1.0的命名约定。

现在,如果我们想使用JPA 2.0命名规则,我们需要将ImplicitNamingStrategyJpaCompliantImpl设置为我们的隐式策略

6. 总结

在本教程中,我们了解了Spring Boot如何将命名策略应用于Hibernate的查询生成器,并且我们还看到了如何自定义这些策略。

与往常一样,本教程的完整源代码可在GitHub上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章