Как найти каждый экземпляр был создан сегодня, когда поле является LocalDateTime в JPA? - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть такая сущность

@Entity
@Table(name = "PAYMENT")
public class PaymentSummary {

    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "payment_id", nullable = false, unique = true)
    private Long id;

    @Column(name = "date_created", nullable = false)
    private LocalDateTime createdDate;

    @OneToOne
    @JoinColumn(name = "webOrder_id")
    private WebOrder webOrder;

    @Enumerated(EnumType.STRING)
    @Column(name = "payment_type")
    private PaymentType paymentType;

    @Column(name = "amount")
    private Double amount;

    @Column(name = "username")
    private String username;
}

, и у меня есть хранилище для этой сущности

@Repository
public interface PaymentRepository extends JpaRepository<PaymentSummary, Long> {
    List<PaymentSummary> findAllByCreatedDate(LocalDateTime localDate); 
}

Позже я хочу получить каждый платеж, созданный сегодня

List<PaymentSummary> payments = paymentRepository.findAllByCreatedDate(LocalDateTime.now());

И он возвращает ноль, я знаю, потому что я передаю LocalDateTime.now (), так что он будет найден точно по Дате-минус секунде. Я хочу перечислить все платежи за сегодня, и все еще хочу сохранить LocalDateTime createDate, как я могу справиться с этой ситуацией, нужно ли мне написать собственный запрос или JPA поддерживает это? Спасибо.

Ответы [ 2 ]

0 голосов
/ 13 апреля 2020

Если вам нужно только сохранить дату платежа (год, месяц, день в месяце) и вам не нужна информация о времени (часы, минуты, ...), вам нужно изменить LocalDateTime на LocalDate на вашей сущности.

Таким образом, вы получите:

List<PaymentSummary> findAllByCreatedDate(LocalDate localDate);

И, используя:

List<PaymentSummary> payments = paymentRepository.findAllByCreatedDate(LocalDate.now());

Будет работать.

Если вам нужно сохранить дату, а также информацию о времени, вам нужно будет использовать что-то вроде этого:

List<PaymentSummary> findAllByCreatedDateBetween(LocalDateTime startDateTime, LocalDateTime endDateTime);

и назвать его как-то так:

// 2020-04-12T00:00.000
LocalDateTime startDateTime = LocalDateTime.of(LocalDate.now() , LocalTime.MIN);
// 2020-04-12T23:59.999
LocalDateTime endDateTime = LocalDateTime.of(LocalDate.now() , LocalTime.MAX);

List<PaymentSummary> payments = paymentRepository.findAllByCreatedDateBetween(startDateTime, endDateTime);
0 голосов
/ 12 апреля 2020

Будет возвращено null, поскольку LocalDateTime.now() создаст текущую дату и время. В вашем случае я думаю, что вам нужно вернуться только по дате

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...