Foto de Yago V.
Yago há 1 ano
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á 4 meses
Contatar Alan

nessa sessao respondemos a perguntas pontuais.

Um professor já respondeu

Envie você também uma dúvida grátis
Ver resposta
Envie uma dúvida grátis
Resposta na hora da Minerva IA e de professores particulares
Enviar dúvida
Minerva IA
do Profes
Respostas na hora
100% no WhatsApp
Envie suas dúvidas pelo App. Baixe agora
Precisa de outra solução? Conheça
Aulas particulares Encontre um professor para combinar e agendar aulas particulares Buscar professor