Spring репозитории и DATA_FORMAT с nativeQuery = false - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь сделать что-то очень простое, но с Spring Repositories кое-что довольно сложно.По сути, я хотел сгруппировать по с DATE_FORMAT, например:

 @Query("SELECT " +
             "    new users.bridge.models.dto.PerformanceDTO(sum(t.gl), sum(t.gl)) " +
             "FROM " +
             "    Transaction t " +
             "GROUP BY DATA_FORMATE(t.createdDate,'%Y-%m-%d')")

Но он выдает синтаксическую ошибку.Есть ли способ сделать это с помощью весенних репозиториев?Я не хочу использовать флаг nativeQuery = true, в противном случае я не могу использовать этот синтаксис

new gara.users.bridge.models.dto.PerformanceDTO(sum(t.gl), sum(t.gl))

ОБНОВЛЕНИЕ:

Ошибки: enter image description here

весь стек Java довольно большой, но:

org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: asc near line 1, column 180 [SELECT     new gara.users.bridge.models.dto.PerformanceDTO(sum(t.gl), sum(t.gl),t.createdDate) FROM     gara.model.db.Transaction t GROUP BY DATE_FORMAT(t.createdDate,'%Y-%m-%d') asc] 

1 Ответ

0 голосов
/ 23 января 2019

Если вы укажете nativeQuery=false (по умолчанию), вам нужно использовать действительный JPQL. JPQL не знает функцию DATE_FORMAT, но вы можете использовать универсальную FUNCTION функцию , которая позволяет вам вызывать произвольные функции SQL.

Таким образом, предложение group by должно работать так: GROUP BY FUNCTION('DATA_FORMAT', t.createdDate,'%Y-%m-%d')

Просто помните, что такие запросы нельзя переносить между базами данных.

но с Spring Repositories кое-что немного сложнее.

Вы всегда можете прибегнуть к реализациям пользовательских методов , которые не должны быть намного сложнее, чем самостоятельная реализация вашего хранилища.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...