【问题标题】:How do I write query to get record that are created one week ago in JPA如何编写查询以获取一周前在 JPA 中创建的记录
【发布时间】:2017-10-03 11:36:01
【问题描述】:

在以下存储库中,我想获取一周前放置的那些记录(订单),我正在使用以下代码,但发生错误并在间隔时说意外令牌所以有人帮助我吗?

public interface OrderRepository extends JpaRepository<Order, Long> {
    @Query("Select Order where orderDate < SQL((? - interval '3' minute), CURRENT_TIMESTAMP)")
    Order currentOrder();

    // I also tried following query 
    @Query("Select Order  where orderDate > NOW() - interval 1 WEEK")
    Order currentOrder();
}

【问题讨论】:

  • 当您运行第二个查询时发生了什么,看起来应该可以工作?
  • @TimBiegeleisen 它给出了一个错误的意外标记:第 1 行附近的间隔,第 41 列 [选择 order where orderDate > NOW() - interval 1 WEEK]
  • 除了 "SQL" 和 NOW" 是无效的 JPQL 之外,你必须使用原生查询吗?
  • @NeilStockton 那我应该用什么?
  • @android 只需在您的实际代码中使用常规 JPQL 查询,而不是命名查询。然后你可以从 Java 中设置任何你想要的日期。

标签: java mysql sql date spring-data-jpa


【解决方案1】:

JPA 对日期函数的支持不多,因此您可能无法从命名查询中获得所需的行为。

但是,常规的 JPQL 查询应该可以工作,因为我们可以在那里绑定我们想要的任何日期。请尝试以下操作:

public List findOrdersLastWeek() {
    Calendar cal = new GregorianCalendar();
    cal.add(Calendar.DAY_OF_MONTH, -7);
    Date lastWeekDate = cal.getTime();        

    return entityManager.createQuery(
       "SELECT o from Orders o WHERE o.orderDate > ?1")
      .setParameter(1, lastWeekDate, TemporalType.DATE);
}

【讨论】:

  • setParameter 中的 1 是什么?
  • 第一个(也是唯一的)参数是一个 Java Date 对应于一周前。
猜你喜欢
  • 2021-01-29
  • 1970-01-01
  • 2022-01-22
  • 2021-04-26
  • 2021-12-27
  • 1970-01-01
  • 2016-06-07
  • 2021-01-04
  • 1970-01-01
相关资源
最近更新 更多