Eclipse 来自所选实体的查询结果返回null

Eclipse 来自所选实体的查询结果返回null,eclipse,jpa,eclipselink,Eclipse,Jpa,Eclipselink,我必须从datatable中检索所选患者的最后一次就诊。问题是查询总是返回bull,以下是负责的代码: public class PatientDao implements Serializable { ...... public List<String> findWithQuery(String query ,int id) { Query q= this.getEntityManager().createQuery(query).setParameter("id"

我必须从datatable中检索所选患者的最后一次就诊。问题是查询总是返回bull,以下是负责的代码:

public class PatientDao implements Serializable {
......
    public List<String> findWithQuery(String query ,int id) {

 Query q=   this.getEntityManager().createQuery(query).setParameter("id",id);

    return q.getResultList(); 
}
}
......
}


@ManagedBean
@SessionScoped
@SuppressWarnings("serial")
public class PatientCtrl implements Serializable{
......
private static Patient selectedpatient = new Patient();
private static PatientDao pDao = new PatientDao();
private  static String lv   ;
......
public  void lastVisit()
{ 

this.setLv( pDao.findWithQuery("select max(v.date) from Visite v where v.patient.id = :id      ",selectedpatient.getId()).toString().replaceAll("^\\[", "").replaceAll("\\]$", ""));



 }



<h3>Dernière visite</h3>
       <p:outputLabel  value="#{patientCtrl.lv}"   />
公共类PatientDao实现可序列化{
......
公共列表findWithQuery(字符串查询,int-id){
Query q=this.getEntityManager().createQuery(Query).setParameter(“id”,id);
返回q.getResultList();
}
}
......
}
@ManagedBean
@会议范围
@抑制警告(“串行”)
公共类PatientCtrl实现可序列化{
......
私人静态患者selectedpatient=新患者();
私有静态PatientDao pDao=新PatientDao();
私有静态字符串lv;
......
公众访问()
{ 
this.setLv(pDao.findWithQuery(“从Visite v中选择最大值(v.date),其中v.patient.id=:id”,selectedpatient.getId()).toString().replaceAll(“^\\[”,”).replaceAll(“\\]$,”);
}
德尼埃访问酒店

它总是空的

这是一个编码错误,因为您选择了带患者的就诊。id=1和患者=p。除非=p.id=1,否则不会得到任何结果,因此为空。我相信您是想使用setParameter(“id”,p)相反,使用v.patient.id=:id和v.patient=:p似乎是多余的,无论如何都应该删除其中一个。

这是一个编码错误,因为您选择了与患者一起访问。id=1和patient=p。除非=p.id=1,否则将不会得到任何结果,因此为空。我相信您是想使用setParameter(“id”,p)相反,但是使用v.patient.id=:id和v.patient=:p似乎是多余的,无论如何都应该删除一个。

从数据表中选择患者后,会出现一个对话框,其中包含从数据表中选择患者后出现的一个对话框,即使我更改了该对话框,结果仍然相同。您有哪些数据生成了什么SQL?仅从“从Visite v中选择v.date,其中v.patient.id=:id”返回什么值?我想将最后一次选择的患者就诊从数据表发送到outputlabel pDao.findWithQuery(“从Visite v中选择最大值(v.date),其中v.patient.id=:id”,selectedpatient.getId()).toString();我将结果放入静态字符串变量(lv)为什么要在列表中调用toString而不是检索列表中包含的字符串?而且您还没有提到SQL发出的查询是什么,也没有提到数据库中的数据。当我将:id替换为像1这样的实数时,它会重新运行一个结果,但当我使用selectedpatient.getId()时,查询返回[null],findWithQuery返回一个列表在本例中只返回一个字符串(日期),因此我在outputlabelEven中添加了tostring PS。当我更改它时,outputlabelEven中没有异常仅为null,结果仍然相同。您有什么数据,生成了什么SQL?仅从“select v.date from Visite v where v.patient.id=:id”返回什么值?我想将上次选定的患者就诊从数据表转到outputlabel pDao.findWithQuery(“从Visite v中选择最大值(v.date),其中v.patient.id=:id”,selectedpatient.getId()).toString();并将结果放入静态字符串变量(lv)中为什么要在列表中调用toString而不是检索列表中包含的字符串?而且您还没有提到SQL发出的查询是什么,也没有提到数据库中的数据。当我将:id替换为像1这样的实数时,它会重新运行一个结果,但当我使用selectedpatient.getId()时,查询返回[null],findWithQuery返回一个列表。在本例中,只返回一个字符串(日期),所以我把它放在字符串PS中,outputlabel中没有异常,只有null