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)