Jump to content
Fórum Script Brasil
  • 0

Problema envolvendo tabela particionada + Spring Boot: GenerationTarget encountered exception accepting command : Error executing DDL "create table


yago_r

Question

Estou trabalhando com tabelas particionadas usando Postgres e Spring Boot, consegui fazer a partição e nos testes que eu fiz o método GET e POST está funcionando do jeito que eu queria, porém gostaria de ajuda para resolver o seguinte erro, que é retornado quando eu inicio a aplicação:

GenerationTarget encountered exception accepting command : Error executing DDL "create table teste (data date not null, id int4 not null, nome varchar(255), primary key (data, id))" via JDBC Statement org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "create table teste (data date not null, id int4 not null, nome varchar(255), primary key (data, id))" via JDBC Statement at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final]

O passo a passo do que eu fiz antes do erro aparecer:

Criei o Model principal, que fará referência a tabela particionada:

    @Entity
    @Table(name = "teste")
    @IdClass(TesteId.class)
    @Getter
    @Setter
    @NoArgsConstructor
    @AllArgsConstructor
    public class Teste {

        @Id
        @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "teste_id_seq")
        @SequenceGenerator(name = "teste_id_seq", sequenceName = "teste_id_seq", initialValue = 1, allocationSize = 1)
        private int id;

        @Id
        private LocalDate data;

        private String nome;

    }

Criei a classe do id composto:

    @Getter
    @Setter
    @NoArgsConstructor
    @AllArgsConstructor
    @EqualsAndHashCode
    public class TesteId implements Serializable {

        private static final long serialVersionUID = 1L;

        private int id;

        private LocalDate data;

    }

E então iniciei a aplicação, tudo rodou normalmente.

Após isso pausei a aplicação e particionei a tabela 'teste' seguindo a documentação do Postgres: https://www.postgresql.org/docs/current/ddl-partitioning.html Tópico: 5.11.2.1. Example

E minha tabela ficou da seguinte forma:

   CREATE TABLE IF NOT EXISTS public.teste
    (
        data date NOT NULL,
        id integer NOT NULL,
        nome character varying(255) COLLATE pg_catalog."default",
        CONSTRAINT teste_pkey PRIMARY KEY (data, id)
    ) PARTITION BY RANGE (data);


    

Então eu iniciei a aplicação novamente e o seguinte erro foi impresso no log do Spring Boot:

    WARN 16668 --- [ main] o.h.t.s.i.ExceptionHandlerLoggedImpl : GenerationTarget             
    encountered exception accepting command : Error executing DDL "create table teste (data 
    date not null, id int4 not null, nome varchar(255), primary key (data, id))" via JDBC 
    Statement org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL 
    "create table teste (data date not null, id int4 not null, nome varchar(255), primary 
    key (data, id))" via JDBC Statement at 
    org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetTo
    Database.java:67) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final] at 
    org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlString(AbstractSchemaMigra
    tor.java:562) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final] at 
    org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlStrings(AbstractSchemaMigr
    ator.java:507) ~[hibernate-core-5.4.32.Final.jar:5.4.32.Final]


Meu application.properties está assim:

    spring.datasource.url=jdbc:postgresql://localhost:5432/teste
    spring.datasource.username=postgres
    spring.datasource.password=postgres
    spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
    spring.jpa.hibernate.ddl-auto=update
    spring.jpa.defer-datasource-initialization=true
    spring.datasource.driver-class-name=org.postgresql.Driver


Eu sei que alterar o 'spring.jpa.hibernate.ddl-auto' para 'none' resolveria o problema, porém não é a solução que eu desejo, já que não quero gerenciar manualmente todas as alterações no banco de dados.

Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 0
Consegui resolver atualizando o Spring Boot para a última versão e adicionando a seguinte dependência no pom.xml:
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>6.2.3.Final</version>
        </dependency>
 
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.1k
    • Total Posts
      651.8k
×
×
  • Create New...