0

这是来自 HQL 中的 WHERE 子句:

(current_timestamp() - c.m_some_time) >= :3000) // finding 3 seconds and older

它不起作用。

我看到了很多关于这个主题的问题,但他们都避免使用current_timestamp()并使用 Java Date() 代替(使用setString()),这对我来说是错误的,因为我需要精确

我看到的另一种方法是派生一种方言并注册我自己的函数。这个好像太过分了。

有什么方法可以在纯内置 HQL 中进行简单的时间数学运算并将其与简单的毫秒/秒值进行比较?

我很好奇的另一个问题是为什么上面的 WHERE 子句确实通过了 HQL 的检查?我的意思是,这是有效的 HQL 查询的一部分(当其他 WHERE 子句有效时)。

4

2 回答 2

0

更改查询中的变量顺序:

current - from_db >= 3000

到:

from_db <= (current - 3000)

您将在查询中计算值:

calculated_timestamp = current_timestamp() - 3000;

c.m_some_time <= :calculated_timestamp
于 2012-06-18T11:49:44.817 回答
0

最终似乎没有答案,所以最好的办法是扩展Dialect和注册一个函数。

于 2012-06-20T07:57:09.673 回答