与HyperSql 2.0相比,HyperSql 2.3中的Timestamp发生了什么变化?

时间:2015-01-05 07:18:34

标签: hibernate timestamp hsqldb

我们使用HyperSql作为我们的单元测试数据库,我们有一个像这样的hql(我们使用hibernate 3.3.1)

select count(*) from TestTable where create_date <= current_timestamp;

create_date的类型是时间戳。该代码适用于HyperSql 2.0,但不适用于HyperSql 2.3。

有人知道时间戳实现从2.0到2.3有什么变化吗?是否与Timezone有关?我检查了HyperSql Changenotes但没有找到任何内容。

更新 这是详细信息: HyperSql用作内存DB中的单元测试。模式是基于带注释的类自动生成的。 create_date列的映射如下:

@Column(name = "create_date", nullable = false)
    public Timestamp getCreateDate() {
    return createDate;
}

测试是,1)清空数据库,2)调用一个应该在数据库中插入记录的方法3)check db包含一条记录,其记录包含create_date&lt; = current_timestamp。

如果仅使用hibernate获取字段,则输出如下

createDate=2015-01-06 13:06:42.132
current_timestamps=2015-01-06 13:06:42.4

它适用于HyperSQL 2.0,但2.3版本返回零记录。我想这是时区问题,但从打印输出中,我没有看到时区信息。显示的时间是当地时间。我的主持人的时区是CST(UTC + 8)。

有关如何调试它的任何建议吗?

1 个答案:

答案 0 :(得分:1)

很难说。 Hibernate 3.3.1太旧了,与HSQLDB 2.x不完全兼容。

它也可能是时区问题。默认情况下,TIMESTAMP类型没有时区,但CURRENT_TIMESTAMP具有隐式时区。 LOCALTIMESTAMP没有时区,应该与普通的TIMESTAMP列进行比较。

更新:已对此进行检查,发现当一个时间戳为时,另一个时区没有时区时为回归。已经修复并致力于SVN以用于下一版本2.3.3。