我有三个班:医生,病人和咨询。 医生和患者课程都有一份咨询清单。
@Entity
public class Consultation {
@Id
@GeneratedValue
private int id;
private Calendar scheduleDate;
private String information;
private String symptoms;
@ManyToOne
private Doctor doctor;
@ManyToOne
private Patient patient;
//...
}
@Entity
public class Patient {
@Id
@GeneratedValue
private int id;
private String name;
private String ssn;
private String address;
@OneToMany(mappedBy = "patient")
private List<Consultation> consultations;
//...
}
@Entity
public class Doctor {
@Id
@GeneratedValue
private int id;
private String name;
private String specialization;
@OneToMany(mappedBy = "doctor")
private List<Consultation> consultations;
//...
}
我想从一个查询中获得医生的病人;这是所有与医生进行相同咨询的患者。请注意,医生和患者之间没有联系。 这是可能的吗?
select p from Patient p where p.consultations **someKeyword** (select d.consultations from Doctor d where d.id = :doctorId)
如果我没有弄错 someKeyword 将包含,如果有的话
where list<entity> contains entity
和 in if
where entity in list<entity>
但在这种情况下会有
list someKeyword list
组合将是:
select p from Patient p where p.consultations contains (select c from Consultation c where c in (select d.consultations from Doctor d where d.id = :doctorId))
但这是否会产生感觉?
我是JPA和JPQL的初学者。
答案 0 :(得分:2)
类似的东西:
select p from Patient p
where exists (
select c from Consultation c
where c.patient = p
and c.doctor.id = :doctorId
)
答案 1 :(得分:1)
本教程可能有所帮助: JPA Tutorial
答案 2 :(得分:0)
您可以使用NamedQuery注释,如下所示
@NamedQuery(
name = "findPatientForDoctor",
query = "SELECT c.patient FROM Consultation c WHERE c.doctor.id : id"))
(仅检查此查询的语法)
这将为一位患者提供医生身份。
由于您的关联就像患者进行了咨询,并且每次结合都与患者和医生进行一对一的映射。目前,您的实体模型中没有任何关系可以让所有患者都去看医生。 Patient to Doctor是一个多对多的关系,目前你的实体似乎不支持这种关系。我不认为没有患者与医生的关系,你可以在一个查询中获得记录。