복붙노트

[SPRING] Date 만 사용하는 Spring 데이터 쿼리

SPRING

Date 만 사용하는 Spring 데이터 쿼리

나는이 데이터 모델을 가지고있다.

public class CustomerModel{

  @Column
  @Type(type="org.joda.time.contrib.hibernate.PersistentDateTime")
  private DateTime membershipDate;
  //Other properties and getters
}

그리고 다음과 같은 repo

public interface CustomerRepo  extends Repository<CustomerModel, Long>{}

내가하고 싶은 것은 있습니다. 주어진 날짜 (예 : 회원 수 8 월 1 일에 가입 한 회원)의 모든 사용자를 검색하십시오. 그러나 문제는 내 DB에서 membershipDate에 시간이 있다는 것입니다. 주어진 날짜에 시간을 무시하고 모든 사용자를 검색하려면 어떻게해야합니까?

해결법

  1. ==============================

    1.불행히도 JodaTime을 사용하면 Between 키워드를 사용하고 하루를 구성하는 두 개의 DateTime 인스턴스를 사용합니다.

    불행히도 JodaTime을 사용하면 Between 키워드를 사용하고 하루를 구성하는 두 개의 DateTime 인스턴스를 사용합니다.

    interface CustomerRepo extends Repository<CustomerModel, Long>{
    
      List<CustomerModel> findByMemberShipDateBetween(DateTime start, DateTime end);
    }
    

    도메인 모델에서 Java 날짜를 내부적으로 사용한 경우이 스타일을 사용할 수 있습니다.

    interface CustomerRepo extends Repository<CustomerModel, Long>{
    
      List<CustomerModel> findByMemberShipDate(@Temporal(TemporalType.DATE) Date date);
    }
    

    @Temporal 주석은 일반 JPA가 현재 매개 변수에 허용되지 않으므로 사용자 정의 Spring Data JPA가 아닙니다. Java Dates에서만 작동하는 이유는 불행히도 현재 JPAPI의 한계입니다. Query의 setParameter (...) 메소드는 Date 유형의 매개 변수에 대해서만 TemporalType을 사용합니다. 매개 변수 바인딩에서 JodaTime 객체를 변환 해 볼 수는 있지만 지속성 공급자가 형식 불일치 (Date VS. DateTime)로 인해 거부한다고 생각합니다.

  2. ==============================

    2.몇 가지 해결 방법을 사용할 수 있습니다. DateTime day Begin and Date Time day를 작성하십시오. 예를 들면 다음과 같습니다. 2013-07-04 00:00:00 및 2013-07-04 23:59:59 및 쿼리별로 필요한 개체 가져 오기 :

    몇 가지 해결 방법을 사용할 수 있습니다. DateTime day Begin and Date Time day를 작성하십시오. 예를 들면 다음과 같습니다. 2013-07-04 00:00:00 및 2013-07-04 23:59:59 및 쿼리별로 필요한 개체 가져 오기 :

    List<CustomerModel> findByMembershipBetween(DateTime dayBegin, DateTime dayEnd);
    
  3. ==============================

    3.JODA 및 봄 & JPA 실제로 좋은 친구, 그냥보세요 :

    JODA 및 봄 & JPA 실제로 좋은 친구, 그냥보세요 :

    http://blog.netgloo.com/2015/04/06/spring-boot-using-joda-time-on-jpa-entity-with-hibernate/

    즐겨

  4. ==============================

    4.DATE 함수를 사용해야합니다.

    DATE 함수를 사용해야합니다.

    두 날짜를 비교하고 시간을 무시하십시오.

    WHERE DATE(dbdDate) = DATE(yourDate)
    
  5. from https://stackoverflow.com/questions/18082276/spring-data-querying-datetime-with-only-date by cc-by-sa and MIT license