Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在JPQL中编写查询?_Java_Database_Jpa_Jpql - Fatal编程技术网

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"))