如何使用WHERE子句从表中选择记录并比较实例(患者)
public History findHistory(Patient patient) { History model=null;
Session sesion=util.HibernateUtil.getSessionFactory().getCurrentSession();
String sql="FROM History h WHERE h.patients=" + patient;
try{
sesion.beginTransaction();
model=(History) sesion.createQuery(sql).uniqueResult();
sesion.beginTransaction().commit();
}
catch(Exception e){
sesion.beginTransaction().rollback();
}
return model;
}
抛出queryException#1562 e.queryString =" FROM entidad.Historia h WHERE h.pacientes=entidad.Paciente@3ad3a221" e.detailMessage ="意外的字符:' @'"
答案 0 :(得分:1)
您的代码的问题在于,像您一样连接患者只会附加patient.toString(),在您的情况下是默认实现(即classname @ hashcode),Hibernate无法找出哪些数据在DB中检索。
首先需要绑定参数:
String sql = "FROM History h WHERE h.patients = :patient";
然后
model = (History) sesion.createQuery(sql)
.setParameter("patient", patient)
.uniqueResult();
修改强>
SQLGrammarException:无法执行查询可能因各种原因发生。尝试在SqlDeveloper(或任何其他工具)中运行生成的查询,并查看数据库所说的内容。在您的情况下,最后一部分and .=?
会导致错误。 cross join
也是Harming。我怀疑你的映射是不完整的,Hibernate无法找到如何加入历史和病人。尝试在历史实体中添加这样的内容:
@ManyToOne
@JoinColumn(name = "patient")
private Patient patient;