Java 如何使用Hibernate HQL或条件内部联接两个表?

Java 如何使用Hibernate HQL或条件内部联接两个表?,java,hibernate,hql,hibernate-criteria,Java,Hibernate,Hql,Hibernate Criteria,其中160 170是患者的信息 如果不使用条件,则使用HQL?查询只返回医生信息(而不返回患者信息)的原因是,如果您将获取类型指定为“急切”,hibernate也将返回患者 1 "Dr dre" sdfssd 243242 drdre@gmail.com 160 170 你有双向映射,所以从每个医生你可以得到他的病人,从每个病人你可以得到他的医生信息。如果你需要一份病人名单,而不是医生名单,只需为病人创建类似的标准即可会话.createCriteria(patient.class),带有

其中
160 170
是患者的信息


如果不使用条件,则使用HQL?

查询只返回医生信息(而不返回患者信息)的原因是,如果您将获取类型指定为“急切”,hibernate也将返回患者

  1 "Dr dre" sdfssd 243242 drdre@gmail.com  160 170

你有双向映射,所以从每个医生你可以得到他的病人,从每个病人你可以得到他的医生信息。如果你需要一份病人名单,而不是医生名单,只需为病人创建类似的标准即可<代码>会话.createCriteria(patient.class),带有所需的限制。你不必让它急切。在大多数情况下,我们不需要急于抓取。如果需要Hibernate会话之外的对象,则最好初始化(Hibernate.initialize)集合或代理


顺便说一句,命名java类时使用驼峰大小写。这是一种广泛使用的惯例。

您需要的是以下内容

使用Hibernate标准API:

@OneToMany(targetEntity = patient.class, cascade = CascadeType.ALL, mappedBy = "doctor", fetch = FetchType.EAGER)
使用HQL(实际上只是JPQL):

您在结果中得到的是
List
类型的值。
同时将
@Cascade(value=CascadeType.SAVE_UPDATE)
添加到
患者
类的
医生
字段中

如果您使用的是HibernateTemplate

select p.doctor, p.systolic, p.diastolic from Patient p where p.phone = ?1

引用自

每个患者都有一名医生。因此我想要医生信息,他的患者电话是“453534”+患者信息。可以这样做吗?[医生。电话医生。电子邮件病人。舒张病人。收缩病人]当然可以。正如我在上面写的那样,为患者类别创建标准,并对特定电话号码进行限制。然后你会得到一份拥有这个特定电话号码的患者名单。然后你可以反复浏览这个列表,为每个病人找医生。如果您想在hibernate会话中使用它,则不必初始化代理。当您从一个病人一个病人地获取医生时。getDoctor()您当然拥有医生的所有属性。这是java,这些都是对象!这里唯一的诀窍是记住初始化代理。阅读一些关于java和对象的知识,并查看hibernate文档。这些都是对象,如果您想要在字符串中包含这些信息,您可以在java代码中迭代对象模型并从对象属性创建字符串。因此,使用上面使用的条件查询,我可以检索医生信息。要检索他的特定患者,我将执行:for(医生d:doctorList){answear=answear.concat(d.getPhone()+“”+d.getEmail()+“”+d.getPatient().displastic+“?”+d.getPatient().systolic);}如果您可以假设每个医生只有一个患者有选定的电话号码,那么您可以执行d.getPhone+…+d.getEmail+…+d.getPatients().get(0).displastic等操作。(请记住,一位医生有一个患者列表,因此可能会有一个具有相同电话号码的患者。怎么做?我有医生列表。如何检索患者和医生信息。我想将它们传递给字符串。“医生电话是”+doctor.phone+…+”患者舒张压是“patient.displastic+。。。
@OneToMany(targetEntity = patient.class, cascade = CascadeType.ALL, mappedBy = "doctor", fetch = FetchType.EAGER)
Criteria query = sessionFactory.getCurrentSession().
createCriteria(Patient.class, "patient");
query.setProjection(Projections.projectionList().
add(Projections.property("patient.doctor")).
add(Projections.property("patient.systolic")).
add(Projections.property("patient.diastolic")));
query.add(Restrictions.eq("patient.phone", phone));
return query.list();
select p.doctor, p.systolic, p.diastolic from Patient p where p.phone = ?1
String hql = "from Boo where id in (:listParam)";
String[] params = { "listParam" };
Object[] values = { list};
List boos = getHibernateTemplate().findByNamedParam(hql, params, values);