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

Lombok- IntelliJ

Dei uma olhada em outros tópicos, mas ainda não consegui utilizar o Lombok. Rodei sem o construtor padrão e não persistia nem Médico e nem Paciente. Coloquei a tag @AllArgsConstructor antes das demais como sugerida pela Beatriz Diegues Duarte e mudou o erro, passou a reclamar do construtor do Endereço, com o erro:

"Unable to locate constructor for embeddable 'med.voll.api.endereco.Endereco"

Dei uma pesquisada e vi uma sugestão no stack overflow e chatGPT de colocar a descrição "(force = true)" na frente da anotação @NoArgsConstructor Ainda assim não funcionou, mas pelo pelo pude criar o construtor padrão sem que a IDE indicasse erro. O que entendo que não deveria ser necessário pelo uso do Lombok. Foi necessário criar apenas para Endereço, pois medico e paciente gerava sem o construtor padrão. Imaginei que era por ser embeddable.

Segui. Mais pra frente, ao buscar todos os médicos ou pacientes não gerou os getters, tive que fazer na mão pra finalizar o curso, e depois, mesmo com os getters gerados. Dava esse erro:

2024-12-05T16:36:22.585-03:00 ERROR 34429 --- [api] [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.springframework.orm.jpa.JpaSystemException: No default constructor for entity 'med.voll.api.paciente.Paciente'] with root cause

org.hibernate.InstantiationException: No default constructor for entity 'med.voll.api.paciente.Paciente'
    at org.hibernate.metamodel.internal.EntityInstantiatorPojoStandard.instantiate(EntityInstantiatorPojoStandard.java:93) ~[hibernate-core-6.6.2.Final.jar:6.6.2.Final]

Tive que fazer os construtores na mão de médico e paciente, porém a IDE mostrava erro e tive que adicionar a descrição "(force = true)" na frente da anotação "@NoArgsConstructor"

Sabendo que deve ser algum erro do Lombok fui ver o arquivo pom.

Tinha esse trecho na parte do build:

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <annotationProcessorPaths>
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </path>
                    </annotationProcessorPaths>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

Comentei a seguinte parte de exclusão:

<!--<configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
      </configuration>-->

Dentro das minhas dependências esta assim:

<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
</dependency>

Já dei build > rebuild project

E ja dei File > Invalidade caches > Invalidade and restart

13 respostas

OBS: Rodrigo, se for gravar aula nova, mostre mais seu gato!!! s2

Oi Jil!

Dá uma olhadinha nesse tópico para ver se é o mesmo caso que o seu: https://cursos.alura.com.br/forum/topico-no-construtor-os-gets-estao-em-vermelho-pedindo-pra-criar-um-metodo-porem-na-aula-nao-tem-467215?hasAccessMGM=true

Uma foto recente do Leopoldo =':'=

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

Ola Rodrigo, joia? Apelou com essa foto linda do Leopoldo!!!

Até é o mesmo problema mas não a mesma raiz, rs. Meu plugin já esta instalado, acha que pode ser a versão? Ou a tag provided dentro de application.properties?

Lista dos plugins instalados e gerenciados pelo maven

screenshot do Lombok instalado e enabled

Minha gata Mia julgando meu código e meu gosto musical... Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Fofinha a Mia :D

Então no seu caso o Lombok já está ok no IntelliJ.

Manda aqui o código completo das suas classes Paciente e Endereco

Tentei retirar os getter e os construtores padrão e rodar pra te mandar o erro, mas nem sobe a applicação. Erro: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Entity Paciente:

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

@Entity(name = "Paciente")
@Table(name = "pacientes")
@AllArgsConstructor
@NoArgsConstructor
//@NoArgsConstructor(force = true)
@Getter
@EqualsAndHashCode(of = "id")
public class Paciente {
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String nome;
    private String email;
    private String telefone;
    private String cpf;
    @Embedded
    private Endereco endereco;
    private Boolean ativo;

    public Paciente(DadosCadastroPaciente dados) {
        this.ativo = true;
        this.nome = dados.nome();
        this.email = dados.email();
        this.telefone = dados.telefone();
        this.cpf = dados.cpf();
        this.endereco = new Endereco(dados.endereco());
    }

    public void atualizarInfo(DadosAtualizacaoPaciente dadosPaciente) {
        if (dadosPaciente.nome() != null) {
            this.nome = dadosPaciente.nome();
        }
        if (dadosPaciente.telefone() != null) {
            this.telefone = dadosPaciente.telefone();
        }
        if (dadosPaciente.endereco() != null) {
            this.endereco.atualizarInformacoes(dadosPaciente.endereco());
        }
    }

    public void inativar() {
        this.ativo = false;
    }
}

Entity Endereço

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

@Embeddable
@Getter
@AllArgsConstructor
@NoArgsConstructor
//@NoArgsConstructor(force = true)
public class Endereco {
    private String logradouro;
    private String bairro;
    private String cep;
    private String numero;
    private String complemento;
    private String cidade;
    private String uf;

    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();
    }

    public void atualizarInformacoes(DadosEndereco dadosEndereco) {
        if (dadosEndereco.logradouro() != null) {
            this.logradouro = dadosEndereco.logradouro();
        }
        if (dadosEndereco.bairro() != null) {
            this.bairro = dadosEndereco.bairro();
        }
        if (dadosEndereco.cep() != null) {
            this.cep = dadosEndereco.cep();
        }
        if (dadosEndereco.uf() != null) {
            this.uf = dadosEndereco.uf();
        }
        if (dadosEndereco.cidade() != null) {
            this.cidade = dadosEndereco.cidade();
        }
        if (dadosEndereco.numero() != null) {
            this.numero = dadosEndereco.numero();
        }
        if (dadosEndereco.complemento() != null) {
            this.complemento = dadosEndereco.complemento();
        }
    }

    @Override
    public String toString() {
        return "Endereco{" +
                "logradouro='" + logradouro + '\'' +
                ", bairro='" + bairro + '\'' +
                ", cep='" + cep + '\'' +
                ", numero='" + numero + '\'' +
                ", complemento='" + complemento + '\'' +
                ", cidade='" + cidade + '\'' +
                ", uf='" + uf + '\'' +
                '}';
    }
}

Como ele reclamava do getId() inseri apenas os getter 'na mão' e rodei, ao criar um paciente dá esse erro: org.hibernate.InstantiationException: Unable to locate constructor for embeddable 'med.voll.api.domain.endereco.Endereco'

Então inseri 'na mão' o construtor sem arg: public Endereco() {} A IDE deu erro, então adicionei a descrição (force = true) na frente da annotation @NoArgsConstructor Criou o paciente, mas quando rodo um getPaciente da esse erro: Bytecode enhancement failed because no public, protected or package-private default constructor was found for entity: med.voll.api.domain.paciente.Paciente. Private constructors don't work with runtime proxies

Então Então inseri 'na mão' o construtor sem arg: public Paciente() {} A IDE deu erro, então adicionei a descrição (force = true) na frente da annotation @NoArgsConstructor E ai cria e faz o get, mas ão traz o endereço, então adicionei os getter 'na mão' no model Endereo e dai tudo certo.

Mas a ideia do lombok é não ter que inserir né? O q estou errando? Quer que mande o código com os getters e constutores padrão?

O código está certinho sim.

O problema é algo relacionado com o Lombok no seu IntelliJ mesmo, que parece não estar funcionando e por isso os getters e construtores não estão sendo gerados.

Tenta fechar o projeto do intelliJ, fechar o Intellij e então abrir e importar novamente o projeto para ver se resolve.

Nao funcionou Rodrigo :'( cry

Acha q tento criar um novo projeto no spring do zero?

Verifica algumas configurações no seu IntelliJ:

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

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

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

Essas configs estão todas "ticadas" =/

Muito estranho então. Tenta desinstalar o IntelliJ e instalar a versão mais recente: https://www.jetbrains.com/idea/download/download-thanks.html?platform=windows&code=IIC

solução!

Rodrigo, me desculpe... Achei aqui! Eram os repositories no arquivo .pom Alias, a falta deles, ao criar direto pelo start.spring.io não veio esse trecho do arquivo, e como os demais projetos do curso tbm não tinha, achei que poderia manter sem.

Adicionei esse trecho após o e rodou tudo normal mesmo extraindo os construtores padrões e gettes feitos 'na mão':

<repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestones</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestones</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>

Eu e Mia agradecemos! Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Ah que bom que resolveu então :)

Bons estudos! =':'=