我有一个包含以下列的表: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语句中的列名显示为Invalid,则假设如果将上述查询作为本机查询传递,则会出现错误the column name id is not valid
。
如果有人能够指出我在这里缺少的内容,那将是一个很大的帮助。
注意:该项目是一种微服务架构,数据库存储在Microsoft SQL Server中,并且API是在Spring Boot中编写的。
function()
语法可能由于MS
参数而不适合您(您可以可能为此注册一个Hibernate用户类型,这很麻烦)。不过,在方言中注册功能应该可以正常工作。您可能需要自己实现SQLFunction
,而不是使用StandardSQLFunction
实现。
关于为何本机查询对您不起作用的原因,您要将查询映射到的结果类是什么?尝试使用具有与查询中使用的别名相同的属性名称的接口或DTO,类似于使用projections的方式。如果这不起作用,则应输入result set mapping。