Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.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 多对多关系的HQL查询_Java_Sql_Hibernate_Annotations_Hql - Fatal编程技术网

Java 多对多关系的HQL查询

Java 多对多关系的HQL查询,java,sql,hibernate,annotations,hql,Java,Sql,Hibernate,Annotations,Hql,我在Java中有两个实体,我建立了一个多对多的双向关系。我正在使用JBOSS服务器和hibernate注释映射 患者实体 @Entity @Table(name = "patient") public class Patient implements Serializable { ... @ManyToMany(fetch = FetchType.LAZY) @JoinTable(name = "treats", joinColumns = { @JoinColumn(name = "patie

我在Java中有两个实体,我建立了一个多对多的双向关系。我正在使用JBOSS服务器和hibernate注释映射

患者实体

@Entity
@Table(name = "patient")
public class Patient implements Serializable {
...
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "treats", joinColumns = { @JoinColumn(name = "patient_id") },
inverseJoinColumns = { @JoinColumn(name = "doctor_id") })
private List<Doctor> doctors = new ArrayList<Doctor>();
@实体
@表(name=“患者”)
公共类Patient实现可序列化{
...
@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(name=“treats”,joinColumns={@JoinColumn(name=“patient_id”)},
inverseJoinColumns={@JoinColumn(name=“doctor\u id”)})
私有列表医生=新建ArrayList();
医生实体

@Entity
@Table(name = "doctor")
public class Doctor implements Serializable {
...
@ManyToMany(fetch = FetchType.LAZY, mappedBy = "doctors")
private List<Patient> patients = new ArrayList<Patient>();
@实体
@表(name=“doctor”)
公共类Doctor实现了可序列化{
...
@ManyToMany(fetch=FetchType.LAZY,mappedBy=“医生”)
private List patients=new ArrayList();
我想查询添加到患者中的医生。如何使用HQL解决此问题?我还需要设置参数。 我尝试了这个方法(它在DAO类中):

public List getDoctorsForPatient(患者){
StringBuilder查询=新建StringBuilder();
查询。追加(“来自患者医生”);
query.append(“患者所在的内部连接患者:患者”);
返回getSession().createQuery(query.toString())
.setParameter(“患者”,患者)
.list();
}

我还尝试从“treats”(n:m关联表)进行查询表,但我有一个例外,它没有映射。

如果映射正确,则无需查询。请参考以下链接,我认为我的映射是正确的,因为当我在pgAdmin中查看数据和表时,一切正常。在患者表中,id是患者的名称,在医生表中,id是医生的nem名称,在treats表中,有病人和医生两个外来id。我只是不知道如何获取这些信息。
@JoinTable(name=“treats”,joinColumns={@JoinColumn(name=“patient\u id”)},inverseJoinColumns={@JoinColumn(name=“doctor\u id”)}
此注释创建了第三个表,名为“treats”,对吗?哦,很抱歉我错过了它。您到底想实现什么?这种关联的全部目的是能够执行
doctor.getPatients()
来获取医生的所有患者。您不需要任何查询。有什么问题吗?
public List<Doctor> getDoctorsForPatient(Patient patient) {
    StringBuilder query = new StringBuilder();
    query.append("from Patient doctors ");
    query.append("inner join Patient where patient in :patient");
    return getSession().createQuery(query.toString())
            .setParameter("patient", patient)
            .list();
}