JPA查询MONTH/YEAR函数

jag*_*ter 15 java orm jpa jpql

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

@NamedQuery(name="querybymonth", query="select t from table1 t where MONTH(c_Date) = 5")
Run Code Online (Sandbox Code Playgroud)

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

Jam*_*mes 23

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

即FUNC('MONTH',c_Date)

在JPA 2.1(EclipseLink 2.5)中,FUNCTION语法成为规范的一部分(并替换了EclipseLink特定的FUNC).

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

此外,如果您使用任何JPA 2.0提供程序并使用Criteria查询,则可以使用function()API来定义它.


amr*_*las 7

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

如果你需要一个动态变量,你也可以这样做.这里:poDate是在setParameter()中确定的年份;

@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+"");
Run Code Online (Sandbox Code Playgroud)

但如果你对你的解决方案没问题,那就没事了.我只是发现JPA执行得更快.