Spring Boot spring.datasource.schema VS spring.jpa.properties.hibernate.default_schema

Posted

技术标签:

【中文标题】Spring Boot spring.datasource.schema VS spring.jpa.properties.hibernate.default_schema【英文标题】: 【发布时间】:2016-05-07 02:19:05 【问题描述】:

最近,我开始使用 Spring Boot 进行 Web 应用开发。

这是我的 .properties 文件内容:

#data source configuration
spring.datasource.url=jdbc:postgresql://localhost:5432/sampledb
spring.datasource.schema=sample
spring.datasource.username=postgres
spring.datasource.password=postgres
spring.datasource.driver-class-name=org.postgresql.Driver
#spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.minimumIdle=3
spring.datasource.maximumPoolSize=5



#jpa properties configuration
#spring.jpa.show-sql=false
spring.jpa.databasePlatform=org.hibernate.dialect.PostgreSQL82Dialect
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.hibernate.ddl-auto=validate
#spring.jpa.properties.hibernate.default_schema=sample

我的实体类的这一部分:

@Entity
@Table(name = "sample_info")
public class SampleInfo implements Serializable

    private Long id;
    private String code;
    private Long serialNumber;

    @Id
    @GeneratedValue(
            strategy = GenerationType.SEQUENCE,
            generator = "sample_info_seq_gen"
    )
    @SequenceGenerator(
            name = "sample_info_seq_gen",
            sequenceName = "sample_info_seq",
            allocationSize = 1
    )
    @Column(name = "id")
    public Long getId() 
        return id;
    

    public void setId(Long id) 
        this.id = id;
    

基于上面的 .properties,问题是每次我尝试使用 Spring Data JPA 存储库保存新的 SampleInfo 时,我总是得到错误序列 "sample_info_seq" not found。

如果我注释 spring.datasource.schema=sample 并取消注释 spring.jpa.properties.hibernate.default_schema=sample,一切正常。

我不知道这两者之间的区别,有人可以帮忙吗?

【问题讨论】:

【参考方案1】:

Spring boot 使用spring.datasource.schema 将带有sql 的文件加载到数据库中。如果你使用这个 Postgres 会认为你想使用默认的 'public' 架构。

spring.jpa.properties.hibernate.default_schema 告诉 Hibernate 你想使用 Postgres 中的哪个模式。通过根据您的示例进行设置,Postgres 将使用“示例”模式。

【讨论】:

以上是关于Spring Boot spring.datasource.schema VS spring.jpa.properties.hibernate.default_schema的主要内容,如果未能解决你的问题,请参考以下文章

Jpa的基本使用

Spring Boot 学习例子

Spring Boot 2Spring Boot CLI

为啥 Spring Boot 应用程序 pom 同时需要 spring-boot-starter-parent 和 spring-boot-starter-web?

《02.Spring Boot连载:Spring Boot实战.Spring Boot核心原理剖析》

spring-boot-quartz, 依赖spring-boot-parent