Mesmo usando ambos os métodos getReferenceById e o findById nenhum deles resolve e pede pra eu criar um construtor na Entidade JPA.
Obs: foi usado o método .get() no final junto com o findById().
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Mesmo usando ambos os métodos getReferenceById e o findById nenhum deles resolve e pede pra eu criar um construtor na Entidade JPA.
Obs: foi usado o método .get() no final junto com o findById().
Olá!
Aparentemente, o problema surge da sua classe Consulta, que está guardando os ids do médico e paciente em vez das instâncias das classes Medico e Paciente buscadas com findById (por isso o Intellij sugere criar um novo construtor que receba as referências em si, e não os ids).
Poderia nos mostrar como está o seu código da classe Consulta?
Segue o código da classe Consulta
package med.voll.api.domain.consultas;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import med.voll.api.domain.medicos.Medico;
import med.voll.api.domain.pacientes.Paciente;
import java.time.LocalDateTime;
@Table(name = "consultas")
@Entity(name = "Consulta")
@Getter
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(of = "id")
public class Consulta {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="medico_id")
private Long idMedico;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="paciente_id")
private Long idPaciente;
private LocalDateTime data;
}
Em vez de manter referências para os ids do médico e paciente na Consulta, tente referenciar as entidades Medico e Paciente. Ou seja:
De:
// código omitido
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="medico_id")
private Long idMedico;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="paciente_id")
private Long idPaciente;
// código omitido
para:
// código omitido
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "medico_id")
private Medico medico;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "paciente_id")
private Paciente paciente;
// código omitido
Meu deus que falta de atenção minha. Fui reassistir a aula que o professor apresentava as novas funcionalidades e de fato, ele referencia as próprias entidades e não os IDs. Valeu pelo toque.