2017-05-15 4 views
1

J'ai une classe qui contient un atttribute de type java.time.LocalDateTime. J'utilise des référentiels de données Spring. Ce que je veux accomplir est d'interroger les entités selon une date:Comment interroger LocalDateTime avec LocalDate?

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

Mais cela ne fonctionne pas, comme une exception est levée:

org.springframework.dao.InvalidDataAccessApiUsageException: Valeur du paramètre [ 2016-10-05] ne correspond pas au type attendu [java.time.LocalDateTime (n/a)];

La question est de savoir comment puis-je interroger MyClass dans la base de données par fecha mais avec un LocalDate?

EDIT Juste au cas où quelqu'un fait face à la même question, je suis venu avec une solution: modifier la méthode du référentiel afin qu'il se présente comme suit:

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); 

} 

Répondre

1

Essayez cette (non testé):

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); 
    // ... 
} 
+0

Une autre solution possible à laquelle je n'ai pas pensé ... Merci – russellhoff

+0

@russellhoff Si cela vous convient, acceptez-le. – Cepr0

1

LocalDateTime et LocalDate sont des types incompatibles tel quel (bien qu'ils implémentent tous les deux Temporal, au cas où vous pourriez travailler avec cela).

Sinon, vous disposez d'une méthode de conversion LocalDateTime#toLocalDate disponible.

+1

Je sais qu'ils ne sont pas compatibles l'un l'autre, et je sais que LocalDateTime peut être converti facilement LocalDate. Mais, où dois-je le faire? Devrais-je utiliser @Query et @Modifying? – russellhoff