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支持这一点。
选择字段并不重要,因为它们只用于测试目的。