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

[Bug] Unable to locate constructor for embeddable 'med.vall.api.endereco.Endereco' (Lombok instalado))

Estou refazendo o curso e não consigo resolver esse erro "Unable to locate constructor for embeddable 'med.vall.api.endereco.Endereco' "

package med.vall.api.controller;

import med.vall.api.medico.DadosCadastroMedico;
import med.vall.api.medico.Medico;
import med.vall.api.medico.MedicoRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

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

    @Autowired
    private MedicoRepository repository;

    @PostMapping
    public void cadastrar(@RequestBody DadosCadastroMedico dados){
        repository.save(new Medico(dados));
        //System.out.println(dados);

    }
}
package med.vall.api.medico;

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

@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.nome();
        this.email = dados.email();
        this.crm = dados.crm();
        this.especialidade = dados.especialidade();
        this.endereco = new Endereco(dados.endereco());
    }




}
package med.vall.api.endereco;

import jakarta.persistence.Embeddable;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Embeddable
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class Endereco {

    private String logradouro;
    private String bairro;
    private String cep;
    private String cidade;
    private String uf;
    private String numero;
    private String complemento;

    public Endereco(DadosEndereco dados) {
        this.logradouro = dados.logradouro();
        this.bairro = dados.bairro();
        this.cep = dados.cep();
        this.uf = dados.uf();
        this.cidade = dados.cidade();
        this.numero = dados.numero();
        this.complemento = dados.complemento();
    }
}

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

4 respostas
solução!

Oi Ivan!

É um problema do IntelliJ com o plugin do Lombok, sendo que para resolver você deve alterar uma configuração.

Acesse as configurações (atalho: CTRL + ALT + S) e deixe essa opção como no seguinte print:

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

Por padrão vem selecionada a opção Processor Path, com um caminho que dá problema no IntelliJ, então você deve alterar para a opção Obtain processors from project classpath.

Depois de fazer essa alteração, basta realizar um build no projeto (botão direito no projeto -> Build Module 'api')

Rodrigo muito obrigado! Resolveu só apanhei pra entender onde ficava o "Build Modulo 'api' " (botão direito na pasta api)

vlw por responder tão rápido :)

Faça um rebuild (botão direito -> Rebuild Module 'api') do projeto e veja na aba de build do intellij se vai acusar algum erro:

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

rapaz tu é muito rápido. na primeira vez nao funcionou, depois que eu respondi eu reiniciei a IDE e refiz tudo novamente e deu certo.

Obrigado novamente! ;)