2013-06-11 1 views
4

У меня есть требование, когда мне нужно ограничить количество записей, возвращенных из таблицы для определенного флага, и всех записей для другого значения флага.Union in JPA query - из той же таблицы

Например: contact-history таблица имеет элемент с именем IorM_flg с возможными значениями «m» и «o».

Мне нужно вернуть только 10 записей 'o' и всех записей 'm'.

Я собирался написать запрос с объединением для этого. Что-то вроде этого:

select ch from contact_history where ch.rownum <= 10 and ch.IorM_flg = 'o' 
Union All 
select ch from contact_history where ch.IorM_flg != 'o' 

Возможно ли это? Обратите внимание, что это запрос JPA. (contact_history - это имя объекта)

Любые другие предложения лучше всего приветствуются!

+0

Если это возможно, я бы рекомендовал не использовать 'JPA', так как это очень ограничено, и применимо только к довольно простых' O/r' отображений. Чтобы иметь большую гибкость, я бы рекомендовал использовать 'Apache dbUtils' или Spring' JdbcTemplate', которые похожи. Кроме того, есть 'JOOQ', который выглядит как хорошая альтернатива, но я не пробовал его глубже. – Yura

ответ

1

Нет, это невозможно с JPQL, потому что у него нет UNION (ALL). Кроме того, нет способа ограничить количество строк, возвращенных в строке запроса, с помощью rownum, но это делается через setMaxResults.

Во многих ситуациях

  • выполнение двух запросов,
  • ограничение числа результатов в первой с setMaxResults и
  • отбрасывания дубликатов и объединения результатов обоих запросов в Java

является жизнеспособным решением.