JPQL 查询没有 return 正确的输出,抛出错误
JPQL query does not return proper output, throws error
下面的查询抛出一个错误
@GET
@Path("findByStartEndVari/{startdate}/{enddate} ")
@Produces({"application/json"})
public List<Dailyrecords> findByStartEndVari(@PathParam("startdate") Date startdate, @PathParam("enddate") Date enddate)
{
TypedQuery<Dailyrecords> q = em.createQuery("SELECT d.painlevel, d.painlocation FROM Dailyrecords d WHERE d.submitdate BETWEEN :startdate AND :enddate ", Dailyrecords.class);
q.setParameter("startdate", startdate);
q.setParameter("enddate", enddate);
return q.getResultList();
}
- 当我使用 SELECT d 而不是特定属性时,它会给出一个输出。
引发 500 内部服务器错误。
您当前的语法不正确。如果您希望 JPQL 查询 return 一个 DailyRecords
对象,那么您需要 select 整个对象:
TypedQuery<Dailyrecords> q = em.createQuery("SELECT d FROM Dailyrecords d WHERE d.submitdate BETWEEN :startdate AND :enddate ", Dailyrecords.class);
q.setParameter("startdate", startdate);
q.setParameter("enddate", enddate);
如果您真的只想要指定的列,那么您可以尝试以下操作:
Query query = session.createQuery("SELECT d.painlevel, d.painlocation FROM Dailyrecords d WHERE d.submitdate BETWEEN :startdate AND :enddate");
List<Object[]> rows = query.list();
当您查询单个列时,您将得到一个 Object[]
,数组中的每个条目对应一列。所以在这种情况下,第一个条目是疼痛程度,第二个条目是疼痛位置。
下面的查询抛出一个错误
@GET
@Path("findByStartEndVari/{startdate}/{enddate} ")
@Produces({"application/json"})
public List<Dailyrecords> findByStartEndVari(@PathParam("startdate") Date startdate, @PathParam("enddate") Date enddate)
{
TypedQuery<Dailyrecords> q = em.createQuery("SELECT d.painlevel, d.painlocation FROM Dailyrecords d WHERE d.submitdate BETWEEN :startdate AND :enddate ", Dailyrecords.class);
q.setParameter("startdate", startdate);
q.setParameter("enddate", enddate);
return q.getResultList();
}
- 当我使用 SELECT d 而不是特定属性时,它会给出一个输出。 引发 500 内部服务器错误。
您当前的语法不正确。如果您希望 JPQL 查询 return 一个 DailyRecords
对象,那么您需要 select 整个对象:
TypedQuery<Dailyrecords> q = em.createQuery("SELECT d FROM Dailyrecords d WHERE d.submitdate BETWEEN :startdate AND :enddate ", Dailyrecords.class);
q.setParameter("startdate", startdate);
q.setParameter("enddate", enddate);
如果您真的只想要指定的列,那么您可以尝试以下操作:
Query query = session.createQuery("SELECT d.painlevel, d.painlocation FROM Dailyrecords d WHERE d.submitdate BETWEEN :startdate AND :enddate");
List<Object[]> rows = query.list();
当您查询单个列时,您将得到一个 Object[]
,数组中的每个条目对应一列。所以在这种情况下,第一个条目是疼痛程度,第二个条目是疼痛位置。