JPA Query MONTH / YEAR функции - PullRequest
       8

JPA Query MONTH / YEAR функции

15 голосов
/ 09 сентября 2010

Как я могу написать запрос JPA, используя функцию MONTH, как SQL-запрос?

@NamedQuery(name="querybymonth", query="select t from table1 t where MONTH(c_Date) = 5")

Когда я использую вышеупомянутый шаблон для запроса, я получаю ошибку: unexpected token - MONTH.

Ответы [ 4 ]

23 голосов
/ 09 сентября 2010

Если вы используете EclipseLink (2.1), вы можете использовать функцию FUNC () для вызова любой функции базы данных, которая не определена в спецификации JPA JPQL.

т.е. FUNC ('MONTH', c_Date)

В JPA 2.1 (EclipseLink 2.5) синтаксис FUNCTION становится частью спецификации (и заменяет специфичный для EclipseLink FUNC).

Если вы используете TopLink Essentials, вы не можете сделать это в JPQL, но вы можете определить для него запрос выражения TopLink (аналогично критериям JPA 2.0) или использовать собственный SQL.

Кроме того, если вы используете какой-либо провайдер JPA 2.0 и используете запрос Criteria, для определения этого можно использовать API функции ().

7 голосов
/ 22 августа 2011

Я хочу запросить YEAR (itemDate), но функция не завершается, тогда я увидел функцию SUBSTRING (), так что я сделал Select q from table where SUBSTRING(itemDate, 1, 4)='2011', и она работает для меня!надеюсь, это поможет!

если вам нужна динамическая переменная, вы тоже можете это сделать.здесь: poDate - это год, который определяется в setParameter ();

@NamedQuery(name = "PurchaseOrders.findByYear", query = "SELECT p FROM PurchaseOrders p WHERE SUBSTRING(p.poDate, 1, 4) = :poDate")

Query q = em.createNamedQuery("PurchaseOrders.findByYear");
q.setParameter("poDate", s_year+"");

, но если вы согласны с вашими решениями, это будет хорошо.я просто нахожу JPA быстрее, чтобы выполнить.

3 голосов
/ 09 сентября 2010

Функция MONTH() существует в Hibernate HQL, но не является стандартной функцией JPA.Возможно, у вашего провайдера JPA есть какой-то собственный эквивалент, но вы об этом не упомянули.Если это не так, воспользуйтесь собственным SQL.


Я использую Toplink Essentials для того же.Пожалуйста, помогите, если какая-либо функция существует в Toplink.Спасибо.

Насколько мне известно, TopLink не имеет прямого эквивалента.Поэтому используйте либо собственный SQL-запрос, либо, возможно, запрос выражения TopLink (не уверен в этом и не уверен, что он доступен в TopLink Essentials).

1 голос
/ 03 февраля 2016

Следующее работало для меня с Hibernate (4.3.9.Final) и JPA 2.1.

@ NamedQuery (name = "PartyEntity.findByAID", query = "выберите отличную psc.party из PartyShortCode psc где (psc.shortCode =: aidNumber или FUNCTION ('REPLACE', psc.accountReference, '', '') =: aidNumber) и psc.sourceSystem in: sourceSystem ")

...