1
resposta

[Dúvida] Não consigo salvar no banco de dados!

Olá pessoal! Boa noite! Estou recomeçando o projeto voll.med, e, estou travado na parte de persistência de dados. Ao tentar salvar o primeiro registro no banco de dados na tabela de medicos, estou tomando o seguinte erro que aparece no VSCode:

"timestamp": "2024-12-23T22:47:12.224+00:00", "status": 500, "error": "Internal Server Error", "trace": "org.springframework.orm.jpa.JpaSystemException: Unable to locate       constructor for embeddable 'br.com.alura.da.med.voll.clinica.api.api_restFUL       .endereco.Endereco'\r\n\tat org.springframework.orm.jpa.vendor       .HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java       :341)\r\n\tat org.springframework.orm.jpa.vendor.HibernateJpaDialect       .translateExceptionIfPossible(HibernateJpaDialect.java:241)\r\n\tat org       .springframework.orm.jpa.AbstractEntityManagerFactoryBean       .translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:560       )\r\n\tat org.springframework.dao.support       .ChainedPersistenceExceptionTranslator.translateExceptionIfPossible       (ChainedPersistenceExceptionTranslator.java:61)\r\n\tat org.springframework       .dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:343       )\r\n\tat org.springframework.dao.support       .PersistenceExceptionTranslationInterceptor.invoke       (PersistenceExceptionTranslationInterceptor.java:160)\r\n\tat org       .springframework.aop.framework.ReflectiveMethodInvocation.proceed       (ReflectiveMethodInvocation.java:184)\r\n\tat org.springframework.data.jpa       .repository.support       .CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor       .invoke(CrudMethodMetadataPostProcessor.java:165)\r\n\tat org.springframework       .aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation       .java:184)\r\n\tat org.springframework.aop.framework.JdkDynamicAopProxy.invoke       (JdkDynamicAopProxy.java:223)\r\n\tat jdk.proxy4/jdk.proxy4.$Proxy126.save       (Unknown Source)\r\n\tat br.com.alura.da.med.voll.clinica.api.api_restFUL       .controllers.MedicoController.cadastrarMedico(MedicoController.java:24

Grato por ajuda.

1 resposta

Olá, Fagner!

Pelo erro que você mencionou, parece que o problema está relacionado à classe Endereco que você está tentando usar como uma embeddable em sua entidade Medico. O erro "Unable to locate constructor for embeddable" indica que o Hibernate não conseguiu encontrar um construtor padrão (sem argumentos) na classe Endereco.

Aqui estão algumas dicas que podem ajudar a resolver o problema:

  1. Verifique o Construtor Padrão: Certifique-se de que a classe Endereco possui um construtor público sem argumentos. O Hibernate precisa disso para criar instâncias da classe.

    @Embeddable
    public class Endereco {
        // Campos...
    
        public Endereco() {
            // Construtor padrão
        }
    
        // Outros construtores, getters e setters...
    }
    
  2. Anotações Correta: Verifique se a classe Endereco está anotada corretamente com @Embeddable. Isso é necessário para que o Hibernate saiba que essa classe deve ser incorporada em outra entidade.

  3. Dependências e Configuração: Certifique-se de que todas as dependências do Hibernate e Spring Data JPA estão configuradas corretamente no seu pom.xml.

  4. Verifique o Mapeamento: Na entidade Medico, verifique se o campo Endereco está mapeado corretamente com a anotação @Embedded.

    @Entity
    public class Medico {
        // Outros campos...
    
        @Embedded
        private Endereco endereco;
    
        // Construtores, getters e setters...
    }
    

Depois de fazer essas verificações, tente rodar a aplicação novamente para ver se o erro persiste. Bons estudos!