У меня довольно сложный запрос, который работает в SQL, но я хотел бы выразить это в HQL для переносимости.Я собираюсь получить настроенное пользователем значение предпочтения, если они существуют, если нет, я должен использовать значение по умолчанию.Это значение должно быть вычтено из текущей даты и сопоставлено со столбцом в таблице, в которой я заинтересован:
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 Criteria, который, кажется, включает в себя большинствоиз логических операторов, которые мне нужны (равно, больше, или isEmpty / isNull), но не уверен, как бы я выразил все эти части.
Использование представления в данный момент не вариант, так как мы 'использование MySQL в качестве производственной базы данных, в то время как интеграционные тесты выполняются с базой данных H2.Я не могу найти функцию sstract substract в H2, в то время как MySQL поддерживает это.
Поля выбора не важны, поскольку они использовались только для целей тестирования.