2010-06-01 3 views
1

Привет всем У меня есть следующая проблема. У меня есть таблица резервов в моей базе данных MySQL, столбцы даты определены DATETIME. Мне нужно сделать запрос с использованием спящего режима, чтобы найти все резервы в один день независимо от того часа, только что его в тот же год месяц и день, и я делаю этоHQL делает запрос по дате (Java + NetBeans)

public List<Reserve> bringAllResByDate(Date date){ 

em = emf.createEntityManager(); 
Query q = em.createQuery("SELECT r FROM Reserve r WHERE r.date=:date "); 
q.setParameter("date", date); 

...

Я действительно не знаю, как это сделать, и приведу меня только с указанной даты, любая помощь?

ответ

0

Мне жаль, что в качестве дат не существовало базисное агностическое время литья. Обычно я рассматриваю ваш сценарий.

Calendar from = Calendar.getInstance(); 
Calendar to = Calendar.getInstance(); 

from.add(Calendar.DATE, -1); 
to.add(Calendar.DATE, 1); 

Query q = em.createQuery("SELECT r FROM Reserve r WHERE r.date > :dateFrom AND r.date < :dateTo "); 
q.setParameter("dateFrom", from.getTimeInMillis()); 
q.setParameter("dateTo", to.getTimeInMillis()); 
9
Query q = em.createQuery(
    "SELECT r FROM Reserve r WHERE cast(r.date as date) = :date"); 

Обратите внимание, что в основе база данных должна поддерживать ANSI cast(... as ...) синтаксис.

+0

Почему функция броска работает? Это не JPQL ?? – logixplayer

+0

Я фактически использую Hibernate под капотом. это похоже на работу с гибернацией. У меня создалось впечатление, что мы не можем использовать встроенные функции sql. Прошу пролить свет на это. Я потратил целый день, избегая использования встроенных функций mysql внутри своего TypedQuery. – logixplayer

+0

@logixplayer Это HQL. – Alex78191