web-dev-qa-db-fra.com

Spring Data Querying DateTime avec uniquement la date

J'ai ce modèle de données

public class CustomerModel{

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

Et le repo suivant

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

Ce que je veux faire, c'est. Récupérez tous les utilisateurs à une date donnée, par exemple (membres qui se sont joints au 1er août 2013), mais le problème est que sur ma base de données, la date de l'adhésion a du temps avec elle. comment puis-je ignorer l'heure et récupérer tous les utilisateurs à une date donnée?

12
user962206

Malheureusement, avec JodaTime, la seule solution consiste à utiliser le mot clé Between et à utiliser deux instances DateTime pour composer la journée.

interface CustomerRepo extends Repository<CustomerModel, Long>{

  List<CustomerModel> findByMemberShipDateBetween(DateTime start, DateTime end);
}

Si votre modèle de domaine utilisait Java Dates en interne, vous auriez pu utiliser ce style:

interface CustomerRepo extends Repository<CustomerModel, Long>{

  List<CustomerModel> findByMemberShipDate(@Temporal(TemporalType.DATE) Date date);
}

L'annotation @Temporal N'est pas une JPA Spring Data personnalisée car la JPA ordinaire n'est actuellement pas autorisée sur les paramètres. La raison pour laquelle cela ne fonctionne qu'avec Java Dates est malheureusement une limitation des JPAPI actuels. La méthode setParameter(…) sur Query ne prend que un TemporalType pour les paramètres de type Date. Nous pourrions essayer de convertir les objets JodaTime lors de la liaison des paramètres mais je suppose que les fournisseurs de persistance rejetteront cela en raison de la non-concordance de type (Date VS. DateTime).

33
Oliver Drotbohm

Vous pouvez faire quelques contournements: créer DateTime jour Begin et Date Heure jour Et qui sont par exemple 2013-07-04 00:00:00 et 2013-07-04 23:59:59 et récupérer les objets nécessaires par requête:

List<CustomerModel> findByMembershipBetween(DateTime dayBegin, DateTime dayEnd);
4
yname

jODA et Spring & JPA sont en fait de bons amis, il suffit de prendre connaissance de:

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

prendre plaisir

3
Robocide