Java 如何在JPQL中编写查询?
我有三门课:医生、病人和会诊。 医生和患者课程都有一个咨询列表作为字段Java 如何在JPQL中编写查询?,java,database,jpa,jpql,Java,Database,Jpa,Jpql,我有三门课:医生、病人和会诊。 医生和患者课程都有一个咨询列表作为字段 @Entity public class Consultation { @Id @GeneratedValue private int id; private Calendar scheduleDate; private String information; private String symptoms; @ManyToOne private Doctor
@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;
//...
}
如果我没弄错的话,如果有的话,关键字会被包含
where list<entity> contains entity
一个组合是:
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的初学者。本教程可能有助于:
本教程可能有助于:
类似于:
select p from Patient p
where exists (
select c from Consultation c
where c.patient = p
and c.doctor.id = :doctorId
)
?类似于:
select p from Patient p
where exists (
select c from Consultation c
where c.patient = p
and c.doctor.id = :doctorId
)
?您可以使用NamedQuery注释,如下所示
@NamedQuery(
name = "findPatientForDoctor",
query = "SELECT c.patient FROM Consultation c WHERE c.doctor.id : id"))
(只需检查此查询的语法)
这将为一名患者提供医生id
因为您的关联就像患者进行咨询,每个消费都与患者和医生进行一对一的映射。目前,您的实体模型中没有为医生获取所有患者的关系。患者与医生之间是一种多对多关系,目前您的实体似乎不支持这种关系。我不认为没有患者与医生之间的关系,你可以在一次查询中获得记录。你可以使用NamedQuery注释,如下所示
@NamedQuery(
name = "findPatientForDoctor",
query = "SELECT c.patient FROM Consultation c WHERE c.doctor.id : id"))
(只需检查此查询的语法)
这将为一名患者提供医生id
因为您的关联就像患者进行咨询,每个消费都与患者和医生进行一对一的映射。目前,您的实体模型中没有为医生获取所有患者的关系。患者与医生之间是一种多对多关系,目前您的实体似乎不支持这种关系。我认为如果没有患者与医生之间的关系,你不可能在一次查询中获得记录。我找到了解决办法;我得到所有的咨询,然后是每次咨询的患者。尽管如此,我还是想知道像《关于你的一切》这样的东西是否可行;我得到所有的咨询,然后是每次咨询的患者。尽管如此,我还是想知道像《关于你的事》这样的东西是否可行。
@NamedQuery(
name = "findPatientForDoctor",
query = "SELECT c.patient FROM Consultation c WHERE c.doctor.id : id"))