0

これは、HQL の WHERE 句からのものです。

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

うまくいきません。

この件に関して多くの質問を見ましたが、それらはすべてcurrent_timestamp()Java Date() の使用を避け、代わりに ( を使用して) 入れています。これは、 precision が必要なため、私にとってsetString()は間違っています。

私が見た別のアプローチは、方言を派生させ、独自の関数を登録することです。これはあまりにも吹き飛ばされているようです。

純粋な組み込み HQL で単純な時間計算を行い、それをミリ秒の単純な値と比較する方法はありますか?

私が興味を持っているもう 1 つの問題は、なぜ上記の WHERE 句が HQL のチェックに合格するのかということです。つまり、これは機能する HQL クエリの一部です (他の WHERE 句が有効な場合)。

4

2 に答える 2

0

最終的には答えがないように見えるので、Dialect関数を拡張して登録するのが最善です。

于 2012-06-20T07:57:09.673 に答える
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 に答える