【问题标题】:Spring JPA - JPQL Named Query Find All By Year And And monthSpring JPA - JPQL 命名查询按年和月查找所有内容
【发布时间】:2022-02-07 20:11:28
【问题描述】:

我正在尝试按特定月份和年份获取所有对象。 我已经用 Native Query 做到了这一点

   @Query(value = "select * from transaction_log as t where year(t.insurance_period)=(:year) AND user_id =(:userId) AND t.employer_id is null", nativeQuery = true)

我想用另一种方式完成,这样我就可以使用实体图等。 我试过了

@Query("select t from Transaction t where year(t.insuranceDate) = ?1 and month(t.insuranceDate) = ?2")

我在方法 Year () 上遇到错误,用于未例外的 '('

以下在 EXTRACT 方法中出现相同错误。

@Query("SELECT t FROM Transaction t WHERE EXTRACT (YEAR FROM t.insuranceDate) = :year AND EXTRACT (month FROMt.insuranceDate) = :month")

【问题讨论】:

    标签: java spring spring-boot hibernate spring-data-jpa


    【解决方案1】:

    您可以使用BETWEEN 每月的第一天和每月的最后一天。根据jpql docBETWEEN是包容性的。

    缺点是进行一些日期计算,但它们对于 java.time 类来说是微不足道的。假设您想要 2020 年 2 月的日期。您可以像这样获得第一天和最后一天:

    int year = 2020;
    int month = 2;
    LocalDate firstDay = LocalDate.of(year, month, 1);
    LocalDate lastDay = firstDay.withDayOfMonth(firstDay.lengthOfMonth());
    

    那么查询将如下所示:

    @Query("SELECT t FROM Transaction t WHERE t.insuranceDate BETWEEN :firstDay AND :lastDay")
    

    【讨论】:

      猜你喜欢
      • 2017-11-30
      • 2019-10-27
      • 2021-08-21
      • 1970-01-01
      • 2015-07-15
      • 2015-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多