Foto de Yago V.
Yago há 2 anos
Enviada pelo
Site

Tabela particionada + spring boot: error executing ddl

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.


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>
 
1 resposta
Professor Alan M.
Identidade verificada
  • CPF verificado
  • E-mail verificado
Respondeu há 9 meses
Contatar Alan

nessa sessao respondemos a perguntas pontuais.

Um professor já respondeu

Envie você também uma dúvida grátis
Ver resposta
Tire dúvidas com IA
Resposta na hora da Minerva IA
Enviar dúvida
Minerva IA
do Profes
Respostas na hora
100% no WhatsApp
Envie suas dúvidas pelo App. Baixe agora
Prefere professores para aulas particulares ou resolução de atividades?
Aulas particulares
Encontre um professor para combinar e agendar aulas particulares Buscar professor
Tarefas
Envie sua atividade, anexe os arquivos e receba ofertas dos professores Enviar tarefa