Запрос, который вы должны использовать:
FROM PositionHistoric h
INNER JOIN FETCH h.date
WHERE h.primaryKey.siteDb = :site
AND h.primaryKey.engineDb = :engine
AND h.primaryKey.keywordDb = :keyword
AND h.date.date <= :date
Обратите внимание, что упорядочение по h.date
довольно бессмысленно (так как оно указывает на сущность SeoDate и, следовательно, фактически вы упорядочиваете по PK), и вы не можете упорядочить по h.date.date
, поскольку SeoDate отображается как many-to-one
.
Также обратите внимание, что строка INNER JOIN FETCH h.date
сама по себе не обязательна, но она сэкономит вам некоторые дополнительные ленивые запросы, если вам действительно потребуется использовать атрибуты SeoDate в возвращенном списке.