当前位置: 首页 > 知识库问答 >
问题:

JPA查询以检查是否存在特定年月的记录?

锺英卫
2023-03-14

我试图实现一个JPA查询,以检查是否存在任何日期时间戳与当前年份月份匹配的记录。现在我正在获取所有记录并进行迭代以匹配。我知道这不是正确的实现,只是想知道是否有任何内置的JPA查询可用于此场景。

这是我到现在为止的实现

     List<Product> productList= productRepository.findAll();

        /*getMonthInt() and getYearInt() is the custom function which returns current 
        month and year. As date.getMonth() and date.getYear() is deprecated
        */

        int currentMonth=getMonthInt(new Date());
        int currentYear=getYearInt(new Date());

        for(Product product:productList){

          int fetchedMonth=getMonthInt(product.getShipmentDate()) ;
          int fetchedYear=getYearInt(product.getShipmentDate());

          if(fetchedMonth == currentMonth && fetchedYear == currentYear){
             //record exist 
          }
          else{
         //do something else
          }
     }

共有1个答案

戴树
2023-03-14

您不需要获取所有记录。如果您试图通过比较时间戳的月份和年份来过滤记录,请遵循以下步骤

方法一:

  • 构造start Date(当年月份的第一天)
  • 构造endDate(当年月份的最后一天)
  • 使用关键字之间并构造一个jpa查询,如下所示

方法2:

  • 使用@Query注释构造一个jpa查询,如下

您的ProductRepository应该如下所示

public interface ProductRepository extends JpaRepository<Product, Integer> {

    List<Product> findAllByShipmentDateBetween(Date startDate, Date endDate);

    @Query("select p from Product p where year(p.shipmentDate) = ?1 and month(p.shipmentDate) = ?2")
    List<Product> findAllByShipmentDate(Integer year, Integer month);
}

默认情况下,spring data jpa使用基于位置的参数绑定,如第二种查询方法所示,这可能会在维护期间导致问题。可以使用命名参数编写更多可维护的代码。例如

@Query("select p from Product p where year(p.shipmentDate) = :year and month(p.shipmentDate) = :month")
List<Product> findAllByShipmentDate(@Param("year") Integer year, @Param("month") Integer month);
 类似资料:
  • 问题内容: 我想向用户显示他是否喜欢图像。为此,我正在创建php代码 我无法对“标签”,“份额”,“评论”,“收藏夹”等事物执行此操作…许多没有比这更简单的了吗?喜欢说 问题答案: 确实有很多方法可以做到这一点,但是如果您打算使用更多的信息,那么用户是否喜欢使用select *是一个坏主意。原因是您要数据库返回该表中每一列的值。 假设它是一个小型数据库,可能不是问题,但是随着数据库变大,您将在数据

  • 问题内容: 我是Laravel的新手。请原谅新手问题,但是如何查找记录是否存在? 我在这里可以查看是否有记录? 问题答案: 这取决于您之后是否要与用户一起使用,还是仅检查是否存在。 如果要使用用户对象(如果存在): 如果您只想检查 甚至更好

  • 我是拉雷维尔的新手。请原谅这个新手的问题,但是我如何找到是否存在记录? 我可以在这里做什么来查看是否有记录?

  • 在一个日期列中有一个表,在同一个日期的不同时间有这么多总计的条目,但我不担心时间。我需要找到某些日期所有总额,随着用户名。当我使用下面的查询。它显示语法错误 选择用户名,总额,从账单日期='2013-04-12' 在上面的查询日期是列名,请帮我。

  • 我需要在JPA查询中传递这个参数。 我如何才能实现这一点,而不是为IS NULL&IS NOT NULL创建2个单独的查询。

  • 问题内容: 我们有一个名为asamembr的表,其中有两个字段:cust_code和mbrcode。 还有另一个表成员消息与外键具有相同的字段,但是当我使用以下查询创建约束时: 我收到此错误: 您能否在表asamembr的两个字段cust_code和mbr_code上告诉您如何查询主键? 问题答案: 首先寻找PK的索引名称(pk_idx列) 其中的构造型: constrtype CHAR(1) C