我正在尝试为Web服务创建@NamedQuery
,以便可以返回具有给定生日的客户列表。
GlassFish报告以下错误:
异常描述:编译时出现问题[从客户c的c中选择c c.dob = to_date(:dob,'dd-Mon-yyyy')]。 [38,45]在FROM子句中未定义标识变量“ to_date”。
@NamedQuery(name = "Customer.findByDob", query = "SELECT c FROM Customer c WHERE c.dob = to_date(:dob, 'dd-Mon-yyyy')")
@GET
@Path("findByDob/{dob}")
@Produces({"application/json"})
public List<Customer> findByDob(@PathParam("dob") String dob) {
Query q = em.createNamedQuery("Customer.findByDob");
q.setParameter("dob", dob);
return q.getResultList();
}
任何反馈都非常感谢。
答案 0 :(得分:1)
您可以在实体管理器中委派从Date到String数据库格式的转换。这样的事情应该起作用:
@NamedQuery(name = "Customer.findByDob", query = "SELECT c FROM Customer c WHERE c.dob = :dob")
@GET
@Path("findByDob/{dob}")
@Produces({"application/json"})
public List<Customer> findByDob(@PathParam("dob") String dob) {
SimpleDateFormat sdf = new SimpleDateFormat("dd-Mon-yyyy");
Date dobDate = sdf.parse(dob); //Create a new Java Date object.
Query q = em.createNamedQuery("Customer.findByDob");
q.setParameter("dob", dobDate); //The entity manager will transform the Date to query needs.
return q.getResultList();
}