1
我有一個相當複雜的查詢,它在SQL中工作,但我想在HQL中爲便攜性表達這一點。如果不存在,我將獲取用戶配置的首選項值,如果不存在,我必須使用默認值。該值必須從當前日期中減去,並針對表中的列,我很感興趣的匹配:如何使用OR構建高級Hibernate查詢並對功能進行彙總
select d.id, d.guid, d.deletetimestamp, u.id
from descriptor d, ownerkey ow, user u
where
d.parentid in
(select td.id
from descriptor td, store s
where s.type = 'Trash'
and s.descriptorid = td.id
)
and d.ownerkeyid = ow.id
and ow.ownerid = u.id
and
(
(d.deletetimestamp < CURRENT_TIMESTAMP() - INTERVAL
(select pv.value
from preferencevalue pv, userpreference up
where u.id = up.userid
and up.preferenceid = 26
and up.value = pv.id)
DAY)
or
(d.deletetimestamp < CURRENT_TIMESTAMP() - INTERVAL
(select cast(pv.value as SIGNED)
from preferencevalue pv, defaultpreference dp
where dp.preferenceid = 26
and not exists(select up.userid from userpreference up where u.id = up.userid and up.preferenceid = 26)
and dp.value = pv.id)
DAY)
)
我試圖構建這樣通過使用標準的API,它似乎包括大部分我需要的邏輯運算符(等於,大於或isEmpty/isNull),但不知道如何表達所有這些部分。
此時使用視圖並不是一種選擇,因爲我們使用MySQL作爲生產數據庫,而集成測試使用H2 inmemory數據庫運行。我無法在H2中找到sata減法函數,而MySQL支持這一點。
選擇字段並不重要,因爲它們只用於測試目的。