web-dev-qa-db-fra.com

Vérifiez la date entre deux autres dates données de printemps jpa

J'ai ce modèle:

public class Event {
    private String name;
    private Date start;
    private Date end;
}

et référentiel comme

@Repository
public interface EventRepository extends JpaRepository<Event, Long> {
    List<Event> findByEventTypeAccount(Account account);
}

Ce que je veux faire, c’est que je passe une date et que j’ai besoin de vérifier que la date est comprise entre start et end par exemple (je transmettrai la date du 30 sept au lieu de toutes les entrées datant du 30 septembre entre leur start et end)

Quelque chose comme findDateisBetweenStartAndEnd(Date date)?

33
doN

Vous devriez jeter un oeil la documentation de référence . C'est bien expliqué.

Dans votre cas, je pense que vous ne pouvez pas utiliser car il faut passer deux paramètres

Entre - findByStartDateBetween… où x.startDate entre? 1 et? 2

Dans votre cas, utilisez une combinaison de LessThan ou LessThanEqual avec GreaterThan ou GreaterThanEqual

  • LessThan/LessThanEqual

LessThan - findByEndLessThan… où x.start <? 1

LessThanEqual findByEndLessThanEqual… où x.start <=? 1

  • GreaterThan/GreaterThanEqual

GreaterThan - findByStartGreaterThan… où x.end>? 1

GreaterThanEqual - findByStartGreaterThanEqual… où x.end> =? 1

Vous pouvez utiliser l'opérateur And et Or pour combiner les deux.

65
Pau

J'ai utilisé la solution suivante pour cela:

findAllByStartDateLessThanEqualAndEndDateGreaterThanEqual(OffsetDateTime endDate, OffsetDateTime startDate);
25
Michaël Cuypers

Vous pouvez également écrire une requête personnalisée en utilisant @Query

@Query(value = "from EntityClassTable t where yourDate BETWEEN :startDate AND :endDate")
public List<EntityClassTable> getAllBetweenDates(@Param("startDate")Date startDate,@Param("endDate")Date endDate);
7
Vikash Kumar