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