1. ホーム
  2. hibernate

[解決済み] Spring Boot spring.datasource.schema VS spring.jpa.properties.hibernate.default_schema

2022-02-12 14:05:14

質問

最近、Webアプリの開発でSpring Bootを使い始めました。

これは、私の.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 をアンコメントすると、すべて正常に動作します。

この2つの違いがわかりません、どなたか教えてください。

解決方法は?

spring.datasource.schemaは、Spring bootがSQLを含むファイルをデータベースに読み込むために使用します。これを使うと、Postgresはデフォルトの'public'スキーマを使いたいのだと勘違いしてしまいます。

spring.jpa.properties.hibernate.default_schema Postgres のどのスキーマを使用したいかを Hibernate に伝えます。この例でこれを設定すると、Postgres は 'sample' スキーマを使用します。