Извлечение года / месяца из переменной TimeStamp в JPQL - PullRequest
1 голос
/ 09 октября 2019

В приложении JSF + JPA свойство временной метки, называемое «createAt», необходимо искать по году и месяцу. Я использовал Extract (Year, creationAt), но выдает ошибку.

Поставщиком персистентности является EclipseLink 2.6 (текущее значение по умолчанию в Netbeans). База данных MySQL.

Это упрощенный запрос

select c from Client c where EXTRACT(YEAR,c.createdAt)=:ey and  EXTRACT(MONTH,c.createdAt)=:eq 

Ошибка:

Exception [EclipseLink-0] (Eclipse Persistence Services - 2.6.1.v20150605-31e8258): org.eclipse.persistence.exceptions.JPQLException
Exception Description: Syntax error parsing [select count(distinct c)    from ClientEncounterComponentItem i join i.itemClient c  where i.retired=:f  and i.item=:v1  and i.integerNumberValue>:d1 and EXTRACT(YEAR,c.createdAt)=:ey and  EXTRACT(MONTH,c.createdAt)=:eq  and i.itemClient.person.province=:area    ]. 
[154, 166] The right expression is not a valid expression.
[167, 263] The query contains a malformed ending.

1 Ответ

2 голосов
/ 10 октября 2019

Документы в https://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/JPQL#Functions показывают, что правильный формат запроса должен быть следующим:

select c from Client c where EXTRACT(YEAR FROM c.createdAt)=:ey and  EXTRACT(MONTH FROM c.createdAt)=:eq

Единичные тесты EclipseLink проверяют, работает ли этот формат при использовании анализатора Hermes в базах данных, которые его поддерживают.

...