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

Erro na criação do Repository

Quando criei o MedicoRepository começou a dar o seguinte erro na inicialização:

2022-12-27 14:29:45.538 WARN 2535 --- [ restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'medicoController': Unsatisfied dependency expressed through field 'repository'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'medicoRepository' defined in med.voll.api.medico.MedicoRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Not a managed type: class med.voll.api.medico.Medico

package med.voll.api.medico;

import org.springframework.data.jpa.repository.JpaRepository;

public interface MedicoRepository extends JpaRepository<Medico, Long>{

}


@RestController @RequestMapping("medicos") public class MedicoController {

@Autowired
private MedicoRepository repository; 

@PostMapping
@Transactional
public void cadastrar(@RequestBody DadosCadastroMedico dados) {
     repository.save(new Medico(dados));
}

}


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

@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nome;
private String email;
private String crm;

@Enumerated(EnumType.STRING)
private Especialidade especialidade;

@Embedded
private Endereco endereco;

public Medico(DadosCadastroMedico dados) {

    this.nome = dados.getNome();
    this.email = dados.getEmail();
    this.crm = dados.getCrm();
    this.especialidade = dados.getEspecialidade();
    this.endereco = new Endereco(dados.getEndereco());

}

}

9 respostas

Oi Klauber!

O erro: java.lang.IllegalArgumentException: Not a managed type: class med.voll.api.medico.Medico

Verifica na entidade Medico se os imports das anotações estão vindo do pacote da JPA(jakarta.persistence)

Sim, estão.

import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.NoArgsConstructor; import med.voll.api.endereco.Endereco;

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

Posta aqui um print da estrutura de pacotes do seu projeto.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Está tudo certinho quanto ao código. Mas notei que você está utilizando o Eclipse e o Lombok não vem instalado nele por padrão, sendo que pode estar causando problemas.

Aqui tem um tópico falando disso: https://cursos.alura.com.br/forum/topico-o-lombok-nao-deveria-criar-os-getters-259618

o lombok já está instalado.

É algum bug então que talvez não tenha atualizado o projeto corretamente.

Para o projeto e faz um clean nele (menu superior Project -> Clean) e rode novamente para ver se resolve.

solução!

O clean não funcionou. Mas eu atualizei as versões: java: 14 -> 18 spring: 2.7.6 - > 3.0.1

atualizei o maven e funcionou.

rsrsrs

Ah sim! Nesse curso precisa ser o Spring Boot 3 e Java 17 mesmo.