Data de Consulta de Data de Spring com Data Única

Eu tenho este modelo de dados

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

E o repo seguinte

 public interface CustomerRepo extends Repository{} 

O que eu quero fazer é. Recuperar todos os usuários em uma determinada data, por exemplo (Membros que entraram em 1 de agosto de 2013), no entanto, o problema é que no meu DB o membershipDate tem um tempo com ele. Como posso ignorar o tempo e recuperar todos os usuários em uma determinada data?

Infelizmente, com o JodaTime, a única maneira de contornar isso é usar a palavra-chave Between e usar duas instâncias de DateTime compondo o dia.

 interface CustomerRepo extends Repository{ List findByMemberShipDateBetween(DateTime start, DateTime end); } 

Se o seu modelo de domínio usou o Java Date s internamente, você poderia ter usado esse estilo:

 interface CustomerRepo extends Repository{ List findByMemberShipDate(@Temporal(TemporalType.DATE) Date date); } 

@Temporal anotação @Temporal é uma forma personalizada do Spring Data JPA, uma vez que o JPA simples atualmente não é permitido em parâmetros. A razão pela qual isso só funciona com o Java Date s infelizmente é uma limitação dos JPAPIs atuais. O setParameter(…) em Query só usa um TemporalType para os parâmetros do tipo Date . Nós poderíamos tentar converter os objects JodaTime na binding de parâmetros, mas eu acho que os provedores de persistência irão rejeitar isso devido à incompatibilidade de tipos então ( Date VS. DateTime ).

Você pode fazer alguma solução alternativa: criar DateTime dayBegin e DateTime dayEnd, que são, por exemplo, 2013-07-04 00:00:00 e 2013-07-04 23:59:59 e buscar objects necessários por consulta:

 List findByMembershipBetween(DateTime dayBegin, DateTime dayEnd); 

jODA e spring & JPA na verdade bons amigos, apenas olhe para:

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

apreciar

Você precisa usar a function DATE

Compare duas datas e ignore o tempo

 WHERE DATE(dbdDate) = DATE(yourDate)