如何在JPQL中创建“findBy Date”命名查询?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在JPQL中创建“findBy Date”命名查询?相关的知识,希望对你有一定的参考价值。

我正在尝试为Web服务创建一个@NamedQuery,以便可以返回具有给定出生日期的客户列表。

GlassFish报告以下错误:

异常描述:编译问题[SELECT c FROM Customer c WHERE 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(); 
}

任何反馈都非常感谢。

答案

您可以在实体管理器中委派从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(); 
    }

以上是关于如何在JPQL中创建“findBy Date”命名查询?的主要内容,如果未能解决你的问题,请参考以下文章

如何在命名空间中创建私有变量?

如何在特定命名空间中创建 K8S 部署?

ReactiveMongoDatabase:如何预先创建集合:无法在多文档事务中创建命名空间

如何在 mongodb 中创建这种命名对象的结构?

在java中创建命名管道

JPQL:多重连接。如何做我的命名查询?