2017-05-15 1 views
1

java.text.LocalDateTime 유형의 attribute를 포함하는 클래스가 있습니다.LocalDate로 LocalDateTime을 쿼리하는 방법은 무엇입니까?

public class MyClass{ 
    // ... 
    private LocalDateTime fecha; 
    // ... 
} 

저는 스프링 데이터 저장소를 사용하고 있습니다. 예외가 슬로우 될 때,

@Service 
public interface IRepository extends CrudRepository<MyClass, UUID> { 
    // ... 
    public void deleteByFecha(LocalDate fecha); 
    // ... 
} 

그러나이 작동하지 않습니다 :

org.springframework.dao.InvalidDataAccessApiUsageException : 매개 변수 값을 [내가 달성하고자하는 날짜에 따라 개체를 쿼리하는 것입니다 2016-10-05] 예상 유형과 일치하지 않습니다 [java.time.LocalDateTime (n/a)];

그래서 질문은 내가 fecha에 의해하지만 LOCALDATE으로 데이터베이스에 MyClass에를 조회 할 수있는 방법인가?

사람이 같은 문제에 직면 그냥 경우 , 나는 하나 개의 솔루션으로 왔어요 편집 :

import org.springframework.transaction.annotation.Transactional; 
import org.springframework.data.jpa.repository.Modifying; 
import org.springframework.data.jpa.repository.Query; 
// ... 

@Service 
public interface IRepository extends CrudRepository<MyClass, UUID> { 

    @Transactional 
    @Modifying 
    @Query("DELETE FROM MyClass mtc WHERE YEAR(mtc.fecha)=?1 AND MONTH(mtc.fecha)=?2 AND DAY(mtc.fecha)=?3") 
    public void deleteByFecha(Integer year, Integer month, Integer day); 

} 

답변

1

은 (테스트하지)이보십시오. 그러나 어디에서해야합니까? @Query와 @ Modifying을 사용해야합니까?
+0

내가 생각하지 못했던 또 다른 가능한 해결책은 ... 감사합니다. – russellhoff

+0

@russellhoff 당신에게 적합하면 그것을 받아주세요. – Cepr0

1

LocalDateTimeLocalDate는 호환되지 않는 유형이 있습니다 다음과 같이 보이도록 저장소의 방법을 수정 있는 그대로 (비록 그들 모두가 Temporal을 구현한다.).

그렇지 않으면 LocalDateTime#toLocalDate 변환 방법을 사용할 수 있습니다.

public interface IRepository extends CrudRepository<MyClass, UUID> { 
    // ... 
    default void delByFecha(LocalDate fecha) { 

     deleteByFechaBetween(fecha.atStartOfDay(), fecha.plusDays(1).atStartOfDay()); 

    } 

    void deleteByFechaBetween(LocalDateTime from, LocalDateTime to); 
    // ... 
} 
+1

나는 그들이 서로 호환 아니다 알고, 그리고 나는 LocalDateTime가 LOCALDATE로 쉽게 변환 할 수 있습니다 알고 – russellhoff

관련 문제