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

时间:2018-02-06 14:35:38

标签: java postgresql hibernate jpa hql

我需要从我的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';

问题在于我无法弄清楚如何将此查询转换为HQL(Hibernate SQL),因为avg(date_part('days', age(datasaida, dataentrada)))部分。

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

P.S。:dataEntrada - 表示startDate (种类)。 dataSaida表示endDate (种类)

2 个答案:

答案 0 :(得分:0)

你可以尝试

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调用数据库特定的函数

答案 1 :(得分:0)

您可以在HQL中使用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'; 来调用本机Postgresql函数:

def fill_layout(images):
    out_items = []
    while len(out_items) <5 and images:
        out_items.append(images.pop(0))
    # do something to your 5 or less items in out_items
    if images:
        fill_layout(images)

有关详细信息,请查看the Call PostgreSQL-specific SQL Functions sectionHibernate with PostgreSQL – 6 things you need to know tutorial