Solucionado (ver solução)
Solucionado
(ver solução)
9
respostas

Não estou achando o erro.

Troquei todos os "check" por "Checagem", pois estava conflitando com o banco a palavra check. e eu não estou achando o erro. Não estou achando nada como esse nome: DadosAtualizacaoChecagemListAdicional, estou dês de ontem tentando achar o erro mas não acho.

Git do projeto na branch dadosAtualizados: https://github.com/brunoffraga/controlador-laboratorio/tree/dadosAtualizado/controle-de-laboratorio/src/main/resources/db/migration

2023-09-19T11:31:59.648-03:00  WARN 19248 --- [  restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: DadosAtualizacaoChecagemListAdicional
2023-09-19T11:31:59.650-03:00  INFO 19248 --- [  restartedMain] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2023-09-19T11:31:59.658-03:00  INFO 19248 --- [  restartedMain] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.
2023-09-19T11:31:59.660-03:00  INFO 19248 --- [  restartedMain] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
2023-09-19T11:31:59.680-03:00  INFO 19248 --- [  restartedMain] .s.b.a.l.ConditionEvaluationReportLogger : 

Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.
2023-09-19T11:31:59.705-03:00 ERROR 19248 --- [  restartedMain] o.s.boot.SpringApplication               : Application run failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: DadosAtualizacaoChecagemListAdicional
9 respostas

Oi!

No seus DTO's tem atributos que são entidades JPA, ao invés de serem outros DTO's, ou classes do Java, como String, Long, BigDecimal, etc.

Acabei de procurar e fazer rever com o projeto que fui apreendendo durante esse curso e está igual, não achei o meu erro,

Tem um problema no mapeamento do relacionamento nas suas entidades. O correto deve ser assim:

@Table(name = "checkListAdicional")
@Entity(name = "CheckListAdicional")
@Getter
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(of = "id")
public class CheckListAdicional {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "checkListAdicional")
    private List<Check> check;

    private boolean ativo;

    public CheckListAdicional(DadosCadatroCheckListAdicional dados){
        this.ativo = true;
        this.check = dados.check();
    }

    public void atualizacaoInfomacaoChekListAdicional(DadosAtualizacaoCheckListAdicional dados){
        this.ativo = true;
        this.check = dados.check();
    }
    
    public void excluir(Long id) {
        this.ativo = false;
    }

    public void ativar(Long id) {
        this.ativo = true;
    }
}
@Table(name = "`check`")
@Entity(name = "Check")
@Getter
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(of = "id")
public class Check {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "`check`")
    private String check;
    private boolean ativo;
    
    @ManyToOne
    private CheckListAdicional checkListAdicional;

    public Check(DadosAtualizacaoCadastroCheck dados) {
        this.ativo = true;
        this.check = dados.check();
        this.checkListAdicional = dados.checkListAdicional();
    }

    public void atualizacaoInfomacaoCheck(DadosAtualizacaoCadastroCheck dados) {
        this.check = dados.check();
    }

    public void excluir(Long id){
        this.ativo = false;
    }
    
    public void ativar(Long id){
        this.ativo = true;
    }
}

Além disso, no seu application.properties você colocou a propriedade spring.jpa.hibernate.ddl-auto=update que não deve ser utilizada por conta das migrations. Apague essa propriedade.

E nesse seu DTO:

public record DadosAtualizacaoCadastroCheck(

    @NotBlank
    String check,

    @NotNull
    CheckListAdicional checkListAdicional

){

}

O atributo checkListAdicional é uma entidade JPA, sendo não recomendado declarar atributos que sejam entidades nos DTOs

Então não devo excluir isso aqui? @NotNull CheckListAdicional checkListAdicional

solução!

Você deve trocar esse atributo para um DTO. Exemplo:

public record DadosAtualizacaoCadastroCheck(

    @NotBlank
    String check,

    @NotNull
    DadosCheckListAdicional checkListAdicional

){
}

E criar esse dto novo com os dados que você precisar. Exemplo:

public record DadosCheckListAdicional(

    @NotNull
    Long id,

    @NotNull
    Boolean ativo

){
}

certo obrigado.

Ta, mas fiquei me perguntando a noite toda pq não deve ter esses, pois eu não tenho que passar eles do json para ele verificar se eu estou colocando tudo que ele armazena?

Nos seus DTOs você deve colocar apenas os campos de acordo com json sendo enviado. Se tiver campos sobrando nos DTOs que mandei de exemplo, pode apagar então e deixar eles de acordo com o json.