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

Erro 500 no método findall

Ao executar a linha de comando :

    @GetMapping
      public List<DadosListagemMedicos> Listar() {
        return repository.findAll().stream().map(DadosListagemMedicos::new).toList();
    }

mas no postman recebo a seguinte mensagem:

 "status": 500,
    "error": "Internal Server Error",
    "trace": "org.springframework.dao.InvalidDataAccessResourceUsageException: JDBC exception executing SQL [select m1_0.id,m1_0.crm,m1_0.email,m1_0.bairro,m1_0.cep,m1_0.cidade,m1_0.complemento,m1_0.logradouro,m1_0.numero,m1_0.uf,m1_0.especialidade,m1_0.nome,m1_0.telefone from medicos m1_0] [Unknown column 'm1_0.id' in 'field list'] [n/a]; SQL [n/a]\r\n\tat org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:256)\r\n\tat org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:229)\r\n\tat org.springframework.orm.jpa.
3 respostas

Oi Luciano!

Posta aqui o código da sua classe Medico e também da sua migration v1

package med.voll.api.medico;
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 {

    public Medico(DadosCadastroMedico dados) {
        this.nome = dados.nome();
        this.email= dados.email();
        this.especialidade = dados.especialidade();
        this.crm = dados.crm();
        this.endereco = new Endereco(dados.endereco());
        this.telefone= dados.telefone();
    }

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

    @Enumerated(EnumType.STRING)
    private Especialidade especialidade;

    @Embedded
    private Endereco endereco;
};

Estou usando o MySQL Server, segue a estrutura da tabela:

CREATE TABLE `medicos` (
  `idmedicos` bigint NOT NULL AUTO_INCREMENT,
  `nome` varchar(100) NOT NULL,
  `email` varchar(100) NOT NULL,
  `especialidade` varchar(60) NOT NULL,
  `logradouro` varchar(100) NOT NULL,
  `bairro` varchar(100) NOT NULL,
  `CEP` varchar(9) NOT NULL,
  `complemento` varchar(100) NOT NULL,
  `numero` varchar(20) DEFAULT NULL,
  `UF` char(2) NOT NULL,
  `cidade` varchar(100) NOT NULL,
  `crm` varchar(6) NOT NULL,
  `telefone` varchar(45) NOT NULL,
  PRIMARY KEY (`idmedicos`),
  UNIQUE KEY `idmedicos_UNIQUE` (`idmedicos`),
  UNIQUE KEY `email_UNIQUE` (`email`),
  UNIQUE KEY `crm_UNIQUE` (`crm`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
solução!

Na sua tabela você chamou a coluna de idmedicos ao invés de id, então precisa anotar o atributo id da classe Medico com:

@Column(name = "idmedicos")