Среднее различие между двумя датами, использующими Hibernate JPA в SQL Server - PullRequest
0 голосов
/ 23 октября 2019

У меня есть таблица со столбцами: id, task_type, start_time, end_time. Мне нужно получить среднее время, затрачиваемое на каждое задание. В запросе SQL я мог бы сделать:

SELECT task_type, AVG(DATEDIFF(MS, end_time, start_time)) AS average_time GROUP BY task_type

Я не могу использовать DATEDIFF в JPA, так как он не поддерживается. Если я передаю nativeQury в JPA "@Query", в нем отображаются имена столбцов, которые не включены в инструкцию SELECT как недействительные, предположим, что если я передам вышеупомянутый запрос как собственный запрос, я получу ошибку the column name id is not valid.

Itбыло бы очень полезно, если кто-то сможет указать, что я здесь скучаю.

Примечание. Проект представляет собой микросервисную архитектуру, база данных хранится в Microsoft SQL Server, а API пишется в Spring Boot.

1 Ответ

0 голосов
/ 23 октября 2019

Относительно вызова специфичных для пользователя и пользовательских функций см. в этом руководстве о том, как это можно сделать из JPQL.

Синтаксис function() может не работать для вас из-за параметра MS (вы можете , вероятно, зарегистрировать пользовательский тип Hibernate для этого, что является неприятностью). Регистрация функции на диалекте должна работать просто отлично. Вы, вероятно, захотите реализовать SQLFunction самостоятельно, а не использовать реализацию StandardSQLFunction.

Что касается того, почему собственный запрос не работает для вас, на какой класс результатов вы пытаетесь отобразить свой запрос? Попробуйте использовать интерфейс или DTO с теми же именами свойств, что и псевдонимами, используемыми в запросе, аналогично тому, как вы используете projection . Если это не сработает, отображение набора результатов должно.

...