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

[Bug] Erro ao cadastrar consulta

java.sql.SQLSyntaxErrorException: Table 'vollmed.medico_id' doesn't exist

Ao cadastrar consulta me vem esse erro, mas todo o meu mapeamento está correto

5 respostas

Oi!

Manda aqui o código da sua classe Médico e da sua migration de criação da tabela de médicos.

package med.voll.api.domain.medico;

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

@Entity(name = "Medicos")
@Table(name = "medicos")
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(of = "id")
@Getter
public class Medico {
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String nome;
    private String email;
    private String telefone;
    private String crm;
    @Enumerated(EnumType.STRING)
    private Especialidade especialidade;
    @Embedded
    private Endereco endereco;

    private boolean ativo;

    public Medico(DadosMedico medico) {
        this.nome = medico.nome();
        this.email = medico.email();
        this.telefone = medico.telefone();
        this.crm = medico.crm();
        this.especialidade = medico.especialidade();
        this.endereco = new Endereco(medico.endereco());
        this.ativo = true;
    }

    public void atualizaMedico(DadosAtualizaMedico dados){
        if (dados.nome() != null){
            this.nome = dados.nome();
        }
        if (dados.telefone() != null){
            this.telefone = dados.telefone();
        }
        if (dados.endereco() != null){
            this.endereco.atualizaEndereco(dados.endereco());
        }
    }

    public void excluir(){
        this.ativo = false;
    }
}
create table medicos(

                        id bigint not null auto_increment,
                        nome varchar(100) not null,
                        email varchar(100) not null unique,
                        crm varchar(6) not null unique,
                        especialidade varchar(100) not null,
                        logradouro varchar(100) not null,
                        bairro varchar(100) not null,
                        cep varchar(9) not null,
                        complemento varchar(100),
                        numero varchar(20),
                        uf char(2) not null,
                        cidade varchar(100) not null,

                        primary key(id)

);
ALTER TABLE medicos ADD telefone VARCHAR(20);
alter table medicos add ativo tinyint;
update medicos set ativo = 1;

Tudo certinho. O erro foi no cadastro de consulta, então manda aqui também sua classe Consulta e a migration dela.

package med.voll.api.domain.consulta;

import jakarta.persistence.*;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import med.voll.api.domain.medico.Medico;
import med.voll.api.domain.paciente.Paciente;

import java.time.LocalDateTime;

@Entity(name = "consulta")
@Table(name = "consultas")
@AllArgsConstructor
@NoArgsConstructor
@Getter
@EqualsAndHashCode(of = "id")
public class Consulta {
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinTable(name = "paciente_id")
    private Paciente paciente;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinTable(name = "medico_id")
    private Medico medico;

    private LocalDateTime data;

}
create table consultas(

    id bigint not null auto_increment,
    medico_id bigint not null,
    paciente_id bigint not null,
    data datetime not null,

    primary key(id),
    constraint fk_consultas_medico_id foreign key(medico_id) references medicos(id),
    constraint fk_consultas_paciente_id foreign key(paciente_id) references pacientes(id)

);
solução!

O problema está na classe Consulta mesmo, nos atributos Medico e Paciente. Você adicionou neles a anotação @JoinTable ao invés de @JoinColumn.

Faça o ajuste que deve resolver.