使用 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 字段