gpt4 book ai didi

java - 使用 Spring Data JPA native 查询在两个日期之间搜索记录?

转载 作者:行者123 更新时间:2023-12-05 01:10:34 29 4
gpt4 key购买 nike

我正在尝试使用 Spring Data Jpa 创建一个端点,以使用户/客户端能够使用我的表中的日期列查找记录的详细信息,但是正在获取的记录只是结束日期之前的记录。

例如,我想要 18 日到 20 日之间的记录,但获取的记录是 18 日和 19 日的记录,即使表中存在该日期(20 日)的记录,也会忽略 20 日的记录。我需要一种方法来检索 18 日和 19 日的记录以及与结束日期有关的记录,在这种情况下是 20 日。任何帮助表示赞赏。

以下是我在 JPA 存储库中使用 JPA 原生查询尝试过的方法。

在第一种方法中,我使用了 BETWEEN 本地查询,但未获取结束日期的记录。这是下面的代码片段:

@Query(value = "SELECT * FROM PAYMENT_MASTER WHERE LAST_UPDATED BETWEEN :startDate AND :endDate", nativeQuery = true)
List<PaymentMaster> getAllBetweenDates(@Param("startDate") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDate startDate,
@Param("endDate") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDate endDate);

下面是我尝试过的另一种方法,它给出了与上述方法和之前的方法相同的结果。在这里,我使用了原生查询 GREATER THAN/EQUAL TO AND LESS THAN/EQUAL TO,但仍然没有得到想要的结果。这是存储库中的代码片段:

@Query(value = "SELECT * FROM PAYMENT_MASTER WHERE LAST_UPDATED >= :startDate AND LAST_UPDATED <= :endDate", nativeQuery = true)
List<PaymentMaster> getAllBetweenDates(@Param("startDate") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDate startDate,
@Param("endDate") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDate endDate);

这是来 self 的 Controller 的代码片段:

@PostMapping("/find/date-between")
public ResponseEntity<Object> findPaymentByDate(@RequestBody DateSearcherDto searcherDto) {
List<PaymentMaster> paymentMasterList = paymentMasterRepository.getAllBetweenDates(searcherDto.getStartDate(), searcherDto.getEndDate());
List<PaymentMasterDto> resultsDto = new ArrayList<>();
}

更新

请查看我在下面创建的 DateSearcher DTO。


package com.oasis.firsbacklogbackend.dto;

import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.time.LocalDateTime;

@Data
public class DateSearcherDto {

@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME, pattern = "yyyy-MM-dd")
private LocalDateTime startDate;

@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME, pattern = "yyyy-MM-dd")
private LocalDateTime endDate;

}


您的帮助将不胜感激。谢谢。

最佳答案

根据@gtiwari333 的回答,我修改了我的代码,并且能够获得获取所有记录(包括结束日期的记录)的预期结果。以下是为将来的读者所做的修改。

我修改后的仓库

    @Query(value = "SELECT * FROM PAYMENT_MASTER WHERE LAST_UPDATED >= :startDate AND LAST_UPDATED <= :endDate", nativeQuery = true)
List<PaymentMaster> getAllBetweenDates(@Param("startDate") LocalDateTime startDate, @Param("endDate") LocalDateTime endDate);


我修改后的 Controller

@PostMapping("/find/date-between")
public ResponseEntity<Object> findPaymentByDate(@RequestBody DateSearcherDto searcherDto) {

LocalDateTime start = LocalDateTime.of(LocalDate.from(searcherDto.getStartDate()), LocalTime.of(0, 0, 0));
LocalDateTime end = LocalDateTime.of(LocalDate.from(searcherDto.getEndDate()), LocalTime.of(23, 59, 59));

List<PaymentMaster> paymentMasterList =
paymentMasterRepository.getAllBetweenDates(start, end);


我的 DateSearcher Dto 修改:

package com.oasis.firsbacklogbackend.dto;

import lombok.Data;

import java.time.LocalDate;

@Data
public class DateSearcherDto {

private LocalDate startDate;

private LocalDate endDate;

}



这就是我解决问题的方法。通过这些修改,它像魔术一样工作......谢谢。

关于java - 使用 Spring Data JPA native 查询在两个日期之间搜索记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64015483/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com