Я хочу рассчитать среднее значение разницы во времени двух полей временной метки объекта, что; У объекта есть значения start_date и finish_date. В SQL, это как следующее:Получите среднее значение двух временных разниц с спящим моментом
SELECT SUM(FINISH_TIME - START_TIME)/COUNT(*) FROM PROCESS_EXECUTION_LOG WHERE FINISH_TIME IS NOT NULL
Когда я пытаюсь запустить эту, как родную SQL в спящем режиме:
Session session = sessionFactory.openSession();
SQLQuery sqlQuery = session
.createSQLQuery("SELECT SUM(FINISH_TIME - START_TIME)/COUNT(*) FROM PROCESS_EXECUTION_LOG WHERE FINISH_TIME IS NOT NULL");
sqlQuery.list();
это выброшено Exeption:
org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111
at org.hibernate.dialect.TypeNames.get(TypeNames.java:76)
at org.hibernate.dialect.TypeNames.get(TypeNames.java:99)
at org.hibernate.dialect.Dialect.getHibernateTypeName(Dialect.java:579)
at org.hibernate.loader.custom.CustomLoader$Metadata.getHibernateType(CustomLoader.java:696)
at org.hibernate.loader.custom.CustomLoader$ScalarResultColumnProcessor.performDiscovery(CustomLoader.java:600)
at org.hibernate.loader.custom.CustomLoader.autoDiscoverTypes(CustomLoader.java:616)
at org.hibernate.loader.Loader.getResultSet(Loader.java:2039)
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1832)
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1811)
at org.hibernate.loader.Loader.doQuery(Loader.java:899)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:341)
at org.hibernate.loader.Loader.doList(Loader.java:2516)
at org.hibernate.loader.Loader.doList(Loader.java:2502)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2332)
at org.hibernate.loader.Loader.list(Loader.java:2327)
at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:338)
at org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:1783)
at org.hibernate.internal.AbstractSessionImpl.list(AbstractSessionImpl.java:231)
at org.hibernate.internal.SQLQueryImpl.list(SQLQueryImpl.java:157)
Это может быть очень тривиальным, но я не мог найти решение. Если есть решение с использованием Hibernate API (Restrictions, Projections и т. Д.), Это будет очень полезно.
EDITED: Я только что понял, что postgresql возвращает тип данных INTERVAL, который неизвестен JDBC. Я думаю, что единственное решение - это переписать этот SQL, который возвращает результат в миллисекундах (как число). Но я не знаю, как это сделать?
Я все еще получаю тот же Exeption –