Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HQL差异2日期(以天为单位)_Java_Hibernate_Postgresql_Hql - Fatal编程技术网

Java HQL差异2日期(以天为单位)

Java HQL差异2日期(以天为单位),java,hibernate,postgresql,hql,Java,Hibernate,Postgresql,Hql,我编写了正确的SQL查询: SELECT i, (i.sme_end - '2015-09-10') FROM Incidents i WHERE (i.sme_end - '2015-09-10') <= 100 ORDER BY ('2015-09-10' - i.sme_end) 选择i,(i.sme\u结束-“2015-09-10”) 从事件一 其中(i.SMEND-'2015-09-10')在WHERE子句中将托盘(i.SMEND-:currentDate)转换为整数 (

我编写了正确的SQL查询:

SELECT i, (i.sme_end - '2015-09-10') 
FROM Incidents i 
WHERE (i.sme_end - '2015-09-10') <= 100 
ORDER BY ('2015-09-10' - i.sme_end)
选择i,(i.sme\u结束-“2015-09-10”)
从事件一
其中(i.SMEND-'2015-09-10')在WHERE子句中将托盘(i.SMEND-:currentDate)转换为整数

(i.smeEnd-:currentDate)::整数要在where子句中将(i.smeEnd-:currentDate)转换为整数的托盘


(i.smeEnd-:currentDate)::integer不幸的是,Hibernate不能很好地处理日期/时间操作符(它通常不理解,它们可以返回什么类型)。在您的例子中,这意味着它将
(i.smeEnd-:currentDate)
表达式视为
时间戳

要克服此限制,您可以通过以下方式调整HQL:

  • WHERE
    中,只需做一些数学运算

    (i.smeEnd-:currentDate)不幸的是,Hibernate不能很好地处理日期/时间操作符(它通常不了解它们可以返回什么类型)。在您的例子中,这意味着它将
    (i.smeEnd-:currentDate)
    表达式视为
    时间戳

    要克服此限制,您可以通过以下方式调整HQL:

    • WHERE
      中,只需做一些数学运算

      (i.smeEnd-:currentDate)currentDate的类型是什么?
      days
      currentDate
      的声明是什么?对不起,忘了写:java.util.Date currentDate=new java.util.Date(System.currentTimeMillis());整数天=100;
      currentDate
      的类型是什么?
      days
      currentDate
      的声明是什么?对不起,忘记写:java.util.Date currentDate=new java.util.Date(System.currentTimeMillis());整数天=100;“选择i,从IncidentEntity i中强制转换((i.SMEND-:currentDate)为整数),其中强制转换((i.SMEND-:currentDate)为整数)“选择i,从IncidentEntity i中强制转换((i.SMEND-:currentDate)为整数),强制转换((i.SMEND-:currentDate)为整数)和提取之间有什么不同(EPOCH FROM date_trunc('day',age(i.smeEnd,:currentDate))/60/60/24?有两个变量在工作。@maks28rus如果可以使用
      CAST
      ,就使用它(它是最简单的变量)。在我的设置中,我无法使CAST适用于此(可能我们使用不同的休眠版本)。CAST((i.smeEnd-:currentDate)作为整数)和EXTRACT之间有什么不同(EPOCH FROM date_trunc('day',age(i.smeEnd,:currentDate))/60/60/24?两个变体正在工作。@maks28rus如果您可以使用
      CAST
      ,请使用它(它是最简单的变体)。在我的设置中,我无法使强制转换为此工作(可能我们使用不同的Hibernate版本)。
      java.util.Date currentDate = new java.util.Date(System.currentTimeMillis());
      int days = 100;
      session.createQuery("SELECT i, (i.smeEnd - :currentDate) "+
                      "FROM IncidentsEntity i " +
                      "WHERE (i.smeEnd - :currentDate) <= :days " +
                      "ORDER BY (i.smeEnd - :currentDate)")
                      .setParameter("days", days)
                      .setParameter("currentDate", currentDate);
      
      SELECT i, EXTRACT(EPOCH FROM date_trunc('day', age(i.smeEnd, :currentDate))) / 60 / 60 / 24
      FROM IncidentsEntity i
      WHERE i.smeEnd <= (DATE(:currentDate) + :days)
      ORDER BY i.smeEnd