使用 Hibernate @Formula 查找时差

Posted

技术标签:

【中文标题】使用 Hibernate @Formula 查找时差【英文标题】:Using Hibernate @Formula for finding time difference 【发布时间】:2014-02-05 11:53:15 【问题描述】:

我正在使用 Hibernate @Formula 来查找 2 列之间的时间差

 @Formula("(sysdate-creation_date) * 86400")
 private long elapsedTime;

如果我在 Oracle 上运行查询,这会以天为单位给出 elapsedTime,但在使用 HSQL DB 进行单元测试时,它会给出以毫秒为单位的 elapsedTime。有什么办法可以让这个公式同时适用于 Oracle 和 HSQLDB ?对于我的用例,我想要以秒为单位的经过时间

【问题讨论】:

DATEDIFF 不适用于 Oracle 如果目标服务器是 oracle,我建议使用 Oracle 进行单元测试,因为你会遇到更多问题,并且在模拟 DB 上浪费的时间比 oracle 设置要多。 H2 可能是更好的选择,但我确实尝试过,并决定不再使用模拟数据库进行测试,无论是否使用休眠。 【参考方案1】:

要查找 2 列之间的时间差(以秒为单位),请使用两者都支持的 SQL。

例如,在 ORA 语法兼容模式下,MYDATE1 - MYDATE2 将两个日期之间的天数作为 INTERVAL。

如果需要数值,请将结果转换为整数或其他数字。

【讨论】:

我无法找到两者都支持的任何此类 SQL。 MYDATE1 - MYDATE2 给出 Oracle 中两个日期之间的天数,但在 HSQLDB 的情况下给出秒数作为输出

以上是关于使用 Hibernate @Formula 查找时差的主要内容,如果未能解决你的问题,请参考以下文章

将 Hibernate @Formula (case) 转换为 JOOQ 字段

Hibernate @Formula 不包含架构

当前不支持公式映射 - Hibernate ORM Envers

hibernate 常识

hibernate 映射文件属性自定义查询语句?

当 bean 具有带有 @Formula 注释的属性时,findRowCount 不起作用