我正在重寫最初在Hibernate Criteria中創建的巨大搜索查詢。我試圖只使用標準的JPA解決方案。我與面臨的問題是,我想打一個where子句是這樣的:JPA Criteria API - 使用日曆值的算術
select ... where (stopTime - startTime) > minimalLength
而這似乎並不可能與日曆值,因爲我無法通過標準API做算術題與他們。有沒有解決方案?
更新1
正如在答案(現在它被刪除),標準API具有sum
,diff
,prod
方法,但是這些簽名中提到:
<N extends java.lang.Number> Expression<N>
method(Expression<? extends N> x, Expression<? extends N> y)
<N extends java.lang.Number> Expression<N>
method(N x, Expression<? extends N> y)
<N extends java.lang.Number> Expression<N>
method(Expression<? extends N> x, N y)
因此它們不適用於Calendar
(或甚至對於Date
)。
更新2
我想,我在正確的軌道上。我決定使用CriteriaBuilder的function
方法,並用它來調用(不幸供應商特定的)datediff
SQL Server方法。它看起來像這樣:
builder.function("datediff", Integer.class, builder.literal("second"), startTime, stopTime)
這近作品,唯一的問題是,datediff
不字符串作爲第一個參數的工作,它需要一個關鍵字(即「第二」不帶引號)。有沒有人知道將函數傳遞給函數的方法?
我有同樣的問題,跑進你在更新時遇到同樣的死衚衕2. – 2015-05-11 21:11:38