繁体   English   中英

如何在JPQL中编写查询?

[英]How to write query in JPQL?

我有三个班级:医生,病人和咨询。 “医生”和“病人”类都有作为字段的咨询列表。

@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

并且

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的初学者。

就像是:

select p from Patient p
where exists (
    select c from Consultation c
    where c.patient = p
    and c.doctor.id = :doctorId
)

本教程可能会有所帮助: JPA教程

您可以使用NamedQuery批注,如下所示

@NamedQuery(
   name = "findPatientForDoctor", 
   query = "SELECT c.patient FROM Consultation c WHERE c.doctor.id : id"))

(仅检查此查询的语法即可)

这将给一名患者提供医生证件。

由于您的联系就像是患者进行咨询,并且每个咨询机构都与患者和医生进行一对一的映射。 当前,您的实体模型中没有关系可以让所有患者都去看医生。 患者对医生的关系是多对多的,目前您的实体似乎不支持这一点。 我认为没有患者与医生的关系就无法在一个查询中获得记录。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM