SQL 服务器中使用 Hibernate JPA 的两个日期之间的平均差异

Average of difference between two dates using Hibernate JPA in SQL Server

我有一个 table 列: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

我无法在 JPA 中使用 DATEDIFF,因为它不受支持。如果我将 nativeQury 传递给 JPA "@Query" 它会将 SELECT 语句中未包含的列名称显示为无效,假设如果我将上述查询作为本机查询传递我会收到错误 the column name id is not valid .

如果有人能够指出我在这里遗漏的内容,那将是一个很大的帮助。

注意:该项目是微服务架构,数据库存储在微软SQL服务器中,API正在SpringBoot中编写。

关于调用特定于供应商和用户定义的函数,请参阅 this tutorial 从 JPQL 中执行此操作的方法。

由于 MS 参数,function() 语法可能对您不起作用(您可以 可能 为它注册一个 Hibernate 用户类型,即一个麻烦)。不过,在方言中注册一个函数应该可以正常工作。您可能希望自己实施 SQLFunction,而不是使用 StandardSQLFunction 实施。

至于为什么本机查询对您不起作用,class 您尝试将查询映射到的结果是什么?尝试使用与查询中使用的别名具有相同 属性 名称的接口或 DTO,类似于您应该使用 projections. If that doesn't work, a result set mapping 的方式。

我在 JPQL 中的写法:

 SELECT ent.taskType, AVG( EXTRACT (EPOCH FROM (ent.endTime - ent.startTime)))
 FROM Entity ent
 GROUP BY ent.taskType

这是几秒钟后的结果,您可以将提取的结果操作成您想要在视图中显示的任何内容。

我通过创建投影 class 和 JPQL 查询解决了这个问题。