Как выбрать только месяц в JPA - PullRequest
2 голосов
/ 12 декабря 2010

У меня проблемы с выбором только месяца или года в JPA

В MySQL я пишу следующее заявление:

select * from table where Month(date) = 12 ;

и в сущности я пишу следующее:

select t from table t where Month(t.date) = 12;

но выдает ошибку !!

PS: извините, я не могу прикрепить свою трассировку стека, потому что меня нет дома: D

Ответы [ 3 ]

1 голос
/ 12 декабря 2010

извините, но вы не можете сделать это с JPA, насколько я знаю.hql hibernate на другой стороне знает такие вещи, как month () hour () и minute ().

проверить этот вопрос: JPA арифметика дат?

надеюсь, что помогло

0 голосов
/ 25 июня 2015

Это может кому-то помочь.

Немногие реализации JPA имеют встроенную поддержку функций даты / времени.

EclipseLink

EclipseLink поддерживает EXTRACT, позволяя любой базе данных поддерживать дату / время часть стоимости, которая будет извлечена из даты / времени. Функция ЭКСТРАКТ база данных независима, но требует поддержки базы данных. EXTRACT (YEAR, model.currencyExchangeDate), но для этого требуется EclipseLink 2.4.x

FUNC позволяет вызывать функцию базы данных из JPQL. Это позволяет вызывать любые функции базы данных, которые не поддерживаются непосредственно в JPQL. Для вызова функции БД MyFunc (a, b, c) используйте FUNC («MyFunc», a, b, c).

Вы можете попробовать FUNC ('YEAR', currencyExchangeDate), чтобы вызвать 'YEAR' функция.

Hibernate

В HQL у вас может быть функция даты YEAR (дата), MONTH (дата), DAY (дата) извлечь необходимые детали. Другие функции времени поддерживаются ЧАС (дата), МИНУТА (дата), ВТОРОЙ (дата).

Критерии API

CriteriaBuilder # function (): создать выражение для выполнения функции базы данных.

CriteriaQuery<IptExchangeratelines> cq = cb.createQuery(IptExchangeratelines.class);
Root<IptExchangeratelines> exRateLine = cq.from(IptExchangeratelines.class);
cq.where(cb.equal(cb.function("year", Integer.class,

exRateLine.get(exRateLine_.currencyExchangeDate)), year)
.and(cb.equal(cb.function("month", Integer.class,
exRateLine.get(exRateLine_.currencyExchangeDate)), month)));
0 голосов
/ 13 декабря 2010

Не является частью JPA, и, следовательно, в роли расширений поставщиков.Большинство реализаций JPA поддерживают это ... и вы не говорите, какую вы используете.DataNucleus, безусловно, поддерживает MONTH, YEAR, DAY, HOUR, MINUTE, SECOND.

...