Я пытаюсь получить запрос greatest-n-per-group, и я хотел бы LEFT JOIN
таблицу с самим собой, чтобы получить запрос форма:JOIN таблица с самим собой с использованием API JPA Criteria (или иначе решайте наибольшую-n-на-группу)
SELECT a.* FROM YourTable a LEFT OUTER JOIN YourTable b ON a.id = b.id AND a.rev < b.rev WHERE b.id IS NULL;
(взято из https://stackoverflow.com/a/7745635/1982385)
Я хотел бы осуществить это, используя критерии запроса JPA (с использованием Hibernate 5.2.4.Final), но единственный способ, которым я могу думать об этом:
// query is a CriteriaQuery<>
Root<YourTable> queryRootTable = query.from(YourTable.class);
Join<YourTable, YourTable> selfJoin = queryRootTable.join(queryRootTable);
Я сделал несколько запросов, добавив условия для .join()
с помощью .on()
, но я не знаю, как я бы выполнить .join()
без отображения. В качестве альтернативы можно было бы оценить еще один способ поиска наибольшей-n-группы. (Я пытаюсь найти ряд с наибольшим rev
, для каждого id
, поэтому прямой SELECT MAX(rev)...
не работает).
Вы пытались присоединиться два экземпляра 'YourTable' ... без использования присоединиться, но просто с' where' состоянии? – perissf
ie "SELECT a FROM YourEntity a, YourEntity b WHERE ..." –
Я пробовал кросс-соединение, как вы сказали, положив условие в WHERE, но оно не работает (похоже, это зависит от того, как LEFT JOIN работает, чтобы решить проблему). –