Java 使用hibernate获取两个时间戳差的平均值
我想计算一个实体的两个时间戳字段的时间差的平均值,这样;实体具有开始日期和结束日期属性。在SQL中,如下所示:Java 使用hibernate获取两个时间戳差的平均值,java,sql,hibernate,native-sql,Java,Sql,Hibernate,Native Sql,我想计算一个实体的两个时间戳字段的时间差的平均值,这样;实体具有开始日期和结束日期属性。在SQL中,如下所示: SELECT SUM(FINISH_TIME - START_TIME) / COUNT(*) FROM PROCESS_EXECUTION_LOG WHERE FINISH_TIME IS NOT NULL 当我尝试在hibernate中以本机sql运行时: Session session = sessionFactory.openSession(); SQLQuery sqlQu
SELECT SUM(FINISH_TIME - START_TIME) / COUNT(*) FROM PROCESS_EXECUTION_LOG WHERE FINISH_TIME IS NOT NULL
当我尝试在hibernate中以本机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();
它抛出了一个解释:
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)
这可能很琐碎,但我找不到解决办法。如果有一个使用HibernateAPI(限制、投影等)的解决方案,它将非常有用
编辑:我刚刚意识到postgresql返回JDBC未知的区间数据类型。我认为唯一的解决方案是重写以毫秒为单位返回结果的SQL(以数字为单位)。但是,我不知道怎么做?这样做吗
String sql = "SELECT SUM(FINISH_TIME - START_TIME) / COUNT(*) FROM PROCESS_EXECUTION_LOG WHERE FINISH_TIME IS NOT NULL";
Session session = sessionFactory.openSession();
SQLQuery sqlQuery = session
.createSQLQuery(sql);
Long value = (Long)sqlQuery.uniqueResult();
我仍然得到同样的解释