JPA 查询月/年函数

2022-09-02 23:58:08

如何像SQL查询一样使用函数编写JPA查询?MONTH

@NamedQuery(name="querybymonth", query="select t from table1 t where MONTH(c_Date) = 5")

当我使用上述模式进行查询时,我收到一个错误:。unexpected token - MONTH


答案 1

如果您使用的是 EclipseLink (2.1),则可以使用 FUNC() 函数来调用 JPA JPQL 规范中未定义的任何数据库函数。

即 FUNC(“月”,c_Date)

在 JPA 2.1 (EclipseLink 2.5) 中,FUNCTION 语法成为规范的一部分(并取代了特定于 EclipseLink 的 FUNC)。

如果您使用的是 TopLink Essentials,则无法在 JPQL 中执行此操作,但可以为其定义 TopLink 表达式查询(类似于 JPA 2.0 条件),或使用本机 SQL。

此外,如果您使用的是任何 JPA 2.0 提供程序并使用条件查询,则有一个函数() API 可用于定义此内容。


答案 2

我想查询YEAR(itemDate),但函数没有退出,然后我看到了SUBSTRING()函数,所以我所做的是,它对我有用!希望它有帮助!Select q from table where SUBSTRING(itemDate, 1, 4)='2011'

如果你需要一个动态变量,你也可以这样做。这里 :p oDate 是在 setParameter() 中被 deifned 的年份;

@NamedQuery(name = "PurchaseOrders.findByYear", query = "SELECT p FROM PurchaseOrders p WHERE SUBSTRING(p.poDate, 1, 4) = :poDate")

Query q = em.createNamedQuery("PurchaseOrders.findByYear");
q.setParameter("poDate", s_year+"");

但如果你对你的解决方案感到满意,那就没问题了。我只是发现JPA执行速度更快。


推荐