6
respostas

Column "id" os duplicated

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.MappingException: Column 'id' is duplicated in mapping for entity 'br.com.clsolucoes.homecare.paciente.Paciente' (use '@Column(insertable=false, updatable=false)' when mapping multiple properties to the same column) Não compila. Se retiro endereço de paciente, o sistema passa a dar erro em medico.java

6 respostas

Ola, boa noite Neidijane não vi seu codigo, seria legal ver o model mas pelo que entendi voce tem o id duplicado.... na entidade paciente: Column 'id' is duplicated in mapping for entity 'br.com.clsolucoes.homecare.paciente.Paciente

package br.com.clsolucoes.homecare.paciente;

import br.com.clsolucoes.homecare.endereco.Endereco; import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.NoArgsConstructor;

@Table(name = "pacientes") @Entity(name = "Paciente") @Getter @NoArgsConstructor @AllArgsConstructor @EqualsAndHashCode(of = "id") public class Paciente { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY)

private Long id;
private String nome;
private String email;
private String telefone;
private String cpf;

@Embedded
private Endereco endereco;

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

} e a endereço: package med.voll.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 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 dados) {
    if (dados.logradouro() != null) {
        this.logradouro = dados.logradouro();
    }
    if (dados.bairro() != null) {
        this.bairro = dados.bairro();
    }
    if (dados.cep() != null) {
        this.cep = dados.cep();
    }
    if (dados.uf() != null) {
        this.uf = dados.uf();
    }
    if (dados.cidade() != null) {
        this.cidade = dados.cidade();
    }
    if (dados.numero() != null) {
        this.numero = dados.numero();
    }
    if (dados.complemento() != null) {
        this.complemento = dados.complemento();
    }
}

}

Nos dados que enviou não vi nem o uso do lombok (não é obrigatório o uso), se vc importou ele no pom, ou as anotações necessarias de columns/id. Os atributos deveriam vir com a anotação columns (ou id), a classe com a anotação entity...os getters and setters...o relacionamento com endereço...onetomany

olhe a resposta da ide: @Table(name = "pacientes") @Entity(name = "Paciente") @Getter @NoArgsConstructor @AllArgsConstructor @EqualsAndHashCode(of = "id") public class Paciente { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY)

sera que estou te ajudando?

Segui como explicado na aula. Usei lombok, classe Record, entidades, etc. Classe paciente.java:

import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Table(name = "pacientes")
@Entity(name = "Paciente")
@Getter
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(of = "id")
public class Paciente {
private static final long serialVersionUID = 1L;
    @Id   @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

O erro só ocorre quando acrescento a anotação:

 @Embedded
    private Endereco endereco;

Vou fechar esse tópico, pois o problema é o mesmo que o reportado nesse: https://cursos.alura.com.br/forum/topico-erro-ao-compilar-258532