Fiz um código com 3 entidades: Medico, Consulta e Paciente, e estou tentando desenvolver um método que marque as consultas em horarios e datas diferentes, e caso haja conflitos ele retorne uma mensagem, mas não estou conseguindo: Eis o método:
private boolean consultaExiste(Consulta consulta) {
EntityManager entityManager = emf.createEntityManager();
TypedQuery<Long> query = entityManager.createQuery(
"SELECT COUNT(c) FROM Consulta c WHERE c.medico = :medico AND c.paciente = :paciente AND c.dataHora = :dataHora",
Long.class);
query.setParameter("medico", consulta.getMedico());
query.setParameter("paciente", consulta.getPaciente());
query.setParameter("dataHora", consulta.getDataHora());
Long count = query.getSingleResult();
return count > 0; // Retorna true se existir uma consulta igual
}
Entidade Consulta:
package br.com.srcm.model;
import java.time.LocalDateTime;
import javax.persistence.AttributeOverride;
import javax.persistence.AttributeOverrides;
import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name = "consultas")
public class Consulta {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private LocalDateTime dataHora;
private String descricao;
@ManyToOne
@JoinColumn(name = "medico_id")
private Medico medico;
@ManyToOne
@JoinColumn(name = "paciente_id")
private Paciente paciente;
public Consulta() {}
public Consulta(LocalDateTime dataHora, String descricao, Medico medico, Paciente paciente) {
super();
this.setDataHora(dataHora);
this.descricao = descricao;
this.medico = medico;
this.paciente = paciente;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public Medico getMedico() {
return medico;
}
public void setMedico(Medico medico) {
this.medico = medico;
}
public Paciente getPaciente() {
return paciente;
}
public void setPaciente(Paciente paciente) {
this.paciente = paciente;
}
public LocalDateTime getDataHora() {
return dataHora;
}
public void setDataHora(LocalDateTime dataHora) {
this.dataHora = dataHora;
}
}
Metodo main:
public static void main(String[] args) {
Medico medico1 = new Medico();
medico1.setNome("Dr hanzzz");
medico1.setCrm("144443344");
medico1.setEspecialidade("Clinico Geral");
MedicoDao medicoDao = new MedicoDao();
medicoDao.cadastrar(medico1);
//
Paciente paciente1 = new Paciente("Beltrano", "000.000.000-00");
PacienteDao pacienteDao = new PacienteDao();
pacienteDao.cadastrar(paciente1);
Consulta consulta = new Consulta(LocalDateTime.of(27, 10,24, 10, 10, 0), "desc", medico1, paciente1);
ConsultaDao consultaDao = new ConsultaDao();
boolean aa = consultaDao.cadastrar(consulta);
}
poderiam me ajudar a achar o erro? já tentei de várias formas e sem sucesso.. fico agradecido.