我们使用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)。
有关如何调试它的任何建议吗?
答案 0 :(得分:1)
很难说。 Hibernate 3.3.1太旧了,与HSQLDB 2.x不完全兼容。
它也可能是时区问题。默认情况下,TIMESTAMP类型没有时区,但CURRENT_TIMESTAMP具有隐式时区。 LOCALTIMESTAMP没有时区,应该与普通的TIMESTAMP列进行比较。
更新:已对此进行检查,发现当一个时间戳为时,另一个时区没有时区时为回归。已经修复并致力于SVN以用于下一版本2.3.3。