在jpa中包含月,年,日期函数

Amo*_*pta 2 java orm jpa jpql

我想在JPA中执行此查询.但是我在执行此查询时遇到错误.如何在JPA中使用Month(),Year()我们可以在本机SQL Query中使用它们.但是如何使用它?请帮帮我.谢谢!

 select model from IptExchangeratelines model where model.iptExchangerate.id=:id and " +
                " month(model.currencyExchangeDate)=:month and year(model.currencyExchangeDate)=:year
Run Code Online (Sandbox Code Playgroud)

Nay*_*kar 11

很少有JPA实现具有对日期/时间函数的内置支持.

  • 的EclipseLink

    EclipseLink支持EXTRACT,允许从日期/时间中提取任何数据库支持的日期/时间部分值.EXTRACT函数与数据库无关,但需要数据库支持.

    EXTRACT(YEAR, model.currencyExchangeDate),但它需要EclipseLink 2.4.x.

    FUNC允许从JPQL调用数据库函数.它允许调用JPQL中不直接支持的任何数据库函数.

    要调用DB函数MyFunc(a, b, c)使用FUNC('MyFunc', a, b, c).

    您可以尝试FUNC('YEAR', currencyExchangeDate)调用'YEAR'功能.

  • 过冬

    在HQL,你可以有日期功能YEAR(date),MONTH(date),DAY(date)提取所需的详细信息.支持的其他时间功能HOUR(date),MINUTE(date),SECOND(date).

  • Criteria API

    CriteriaBuilder #function():为执行数据库函数创建一个表达式.

    CriteriaQuery<IptExchangeratelines> cq = cb.createQuery(IptExchangeratelines.class); Root<IptExchangeratelines> exRateLine = cq.from(IptExchangeratelines.class); cq.where(cb.equal(cb.function("year", Integer.class,
    exRateLine.get(exRateLine_.currencyExchangeDate)), year) .and(cb.equal(cb.function("month", Integer.class, exRateLine.get(exRateLine_.currencyExchangeDate)), month)));