如何使用 HQL (Hibernate) 查询日期的平均天数差异?

How can I query the average difference of dates in days using HQL (Hibernate)?

我需要从我的 PostgreSQL 数据库中检索,该数据库已使用 Hibernate 映射到 Java,记录的平均日期差异(如您所说,开始和结束) .

我写了一个原生的 PostgreSQL 查询,效果很好:

SELECT avg(date_part('days', age(datasaida, dataentrada))) as avg_days
  FROM processo.processo
  WHERE processo.codsituacao = '14'
  AND processo.dataEntrada >=  now() - interval '30 days';

问题是由于 avg(date_part('days', age(datasaida, dataentrada))) 部分,我不知道如何将此查询转换为 HQL (Hibernate SQL)。

我需要在前端显示信息,我正在使用 JSF Primefaces 构建它。

P.S.: dataEntrada - 表示开始日期 (有点)。 dataSaida 表示结束日期 (kind of)

你可以试试

avg(DAY(function('age', datasaida, dataentrada)))

or

avg(DAY(datasaid - dataentrada))

DAY 是标准的 JPA 函数:http://www.objectdb.com/java/jpa/query/jpql/date

使用函数('age', datasaida, dataentrada) 你可以从JPA调用数据库特定函数

那么你可以在 HQL 中使用 function('function_name', param1, param2) 来调用本机 Postgresql 函数:

SELECT avg(function('date_part', 'days', function('age', datasaida, dataentrada))) as avg_days
  FROM processo.processo
  WHERE processo.codsituacao = '14'
  AND processo.dataEntrada >=  now() - interval '30 days';

有关详细信息,您可以查看 the Call PostgreSQL-specific SQL Functions section of the Hibernate with PostgreSQL – 6 things you need to know tutorial