【发布时间】:2018-05-29 21:49:28
【问题描述】:
我想使用 Hibernate current_timestamp() 将基于数据库时间的时间戳写入列。我想使用数据库时间,而不是使用数据库的服务系统的系统时间。我将数据库时间用于两个查询,Lock 和 Unlock。
锁定查询
UPDATE MyEntity e SET e.lock = current_timestamp() WHERE e.id = :id
解锁查询
UPDATE MyEntity e SET e.lock = (current_timestamp() - "30 seconds") WHERE e.id = :id
我最后的办法是像这样对 PostgreSQL 使用本机查询:
SELECT CURRENT_TIMESTAMP < (CURRENT_TIMESTAMP + INTERVAL '30 second')
我无法找到有关如何添加/减去时间的文档,如果它甚至受支持的话。如何构建 Unlock 查询?
【问题讨论】:
-
Afaik 尚不支持它... jpa 2.1 引入了 FUNC('functionName', args) 来调用特定的 db 函数,但它显然仍然依赖于 db
-
请注意:您应该将 service 和 db 都设置为使用 Utc 并为自己省去很多麻烦
-
谢谢。我们到处都在使用 UTC,但我仍然担心不同的实例在不同的时钟上。
-
使用 JPA 或原生查询计算时间 那么是否也接受原生查询?解锁部分?
-
@pirho 是的,本地查询是我现在可以解决的问题。如果 JPA 还不支持这个,我愿意接受它作为答案。