Запросы диапазона дат Eclipselink (с группировкой по) - PullRequest
1 голос
/ 06 февраля 2011

Я пытаюсь выполнить запрос в диапазоне дат с помощью Eclipselink JPA 2.0, но все, что я пробую, не получается. Собственный SQL-запрос будет выглядеть так:

SELECT booked FROM household_bookings WHERE YEAR(booked) = 2011 GROUP BY YEAR(booked)

Но я не хочу делать нативный запрос, когда eclipselink в фоновом режиме делает все, что мне нужно. Я попробовал это:

SELECT b FROM Booking b WHERE YEAR(b.booked) = '" + year + "'

где 'year' - это объект Date. Но это возвращает «Неожиданный токен [(]».

Я также пробовал ExpressionBuilder, но столкнулся с той же ошибкой («Неожиданный токен [(]»).

Есть ли какое-нибудь руководство по выполнению запросов в диапазоне дат с помощью Eclipselink?

1 Ответ

2 голосов
/ 07 февраля 2011

В JPQL не определена функция YEAR, поэтому в EclipseLink вам нужно использовать функцию FUNC, чтобы определить это.

"SELECT b FROM Booking b WHERE FUNC('YEAR', b.booked) = '" + year + "'"

С помощью выражений вы не можете получить ошибку («Неожиданный токен [(]»), поскольку токенов нет? Или вы получили эту ошибку из базы данных? В любом случае, Expression определяет getFunction (), а также datePart (), которую можно использовать в некоторые базы данных.

...