Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Compare date only (without time) in JPA2 (JPQL)

Im trying to compare Calendars with JPA2. The query looks somewhat like that:

TypedQuery<X> q = em.createQuery("select r from Record r where r.calendar= :calendar", X.class);
Calendar c = foo(); // setting fields and stuff
q.setParameter("calendar", c);

This, however, compares the date + time. I want to know if MM:DD:YYYY is equal and do not care about the time. Is there a nice way to do that in JPA2 or do I have to create a native query?

I tried setting HH:MM:SS:... to zero before saving it in the db but I don't know if this is very wise, regarding time zones and daylight saving and stuff.

like image 283
atamanroman Avatar asked May 04 '11 15:05

atamanroman


2 Answers

q.setParameter("calendar", c, TemporalType.DATE)

You can pass the TemporalType.DATE to setParameter method to truncate the date+time.

like image 172
Otávio Garcia Avatar answered Oct 02 '22 07:10

Otávio Garcia


There is no mention of DateTime functions allowing to do that in the spec of JPQL, but you could always cheat and do

select r from Record r where r.calendar >= :theDayAtZeroOClock and r.calendar < :theDayAfterAtZeroOClock
like image 8
JB Nizet Avatar answered Oct 02 '22 06:10

JB Nizet