编程语言
首页 > 编程语言> > java – 如何使用Hibernate HQL或Criteria内部连接两个表?

java – 如何使用Hibernate HQL或Criteria内部连接两个表?

作者:互联网

@Entity
public class doctor {
   @Id
   private int id;
   private String username;
   private String password;
   private String phone;
   private String email;

   @OneToMany(targetEntity = patient.class, cascade = CascadeType.ALL, mappedBy = "doctor")
   @Cascade(value = org.hibernate.annotations.CascadeType.ALL)
   private Collection<patient> patients = new ArrayList<patient>();
}

@Entity
public class patient {
   @Id
   private int id;
   private String name;
   private String surname;
   private String phone;
   private int systolic;
   private int diastolic;

   @ManyToOne
   private doctor doctor;
}

目前我只能通过以下标准检索医生信息:

Criteria query = session.createCriteria(doctor.class);
query.createCriteria("patients", "p");
query.add(Restrictions.eq("p.phone", phone));
List<doctor> doctorList = (ArrayList<doctor>) query.list();

如何通过提供患者电话,医生信息和一些患者信息来恢复休眠标准?

Something like : phone=3423423424 , then answear is :

————-doctor’s info———————————-patientinfo(systolic,diastolic)———————–

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

其中160 170是患者的信息

如果没有标准,使用HQL?

解决方法:

您有双向映射,因此每位医生都可以得到患者,每位患者都可以获得医生信息.如果您需要患者列表而不是医生列表,只需为患者创建类似的标准. session.createCriteria(patient.class),具有所需的限制.你不必急于求成.在大多数情况下,我们不需要急切的提取.如果你需要hibernate会话之外的对象,那么初始化(Hibernate.initialize)集合或代理要好得多.

btw在命名java类时使用camel case.它是广泛使用的惯例.

标签:java,hibernate,hibernate-criteria,hql
来源: https://codeday.me/bug/20190901/1786282.html