2016-12-31 2 views
1

Не могли бы вы помочь мне создать конструкцию QueryDSL для SQL, как показано ниже, с помощью JPA Query. Я использую 4.1.3.QueryDSL - добавить подзапрос в инструкцию FROM с помощью JPA

SELECT * FROM (SELECT a FROM b WHERE a.z = 1) WHERE rownum <=1; 

Названные решения не работает для меня QueryDSL - add subquery into FROM statement

Спасибо заранее.

+0

Вы внедрили его? – devanathan

ответ

0

Ниже запрос:

SELECT a FROM b WHERE a.z = 1

не имеет order by положение, поэтому упорядочение по умолчанию будет применяться. Согласно this SO ответ, заказ не прогнозируется. Поэтому я рекомендую добавить предложение order by.

Если это всего лишь пример, а фактический запрос содержит order by, то вы можете реализовать подобную логику в одном запросе; вместо того, чтобы обернуть его в другой запрос и получить первую строку, например. что-то вроде (SELECT a FROM b WHERE a.z = 1 order by z) с rownum. Ниже приведены шаги, чтобы сделать это с помощью JPA образом:

  • Написать репозиторий для этой таблицы (вы можете продлить PagingAndSortingRepository, как это уже имеет некоторые методы)
  • Написать findBy() метод, который принимает Pageble аргумент (вместе с г), это будет выглядеть следующим образом: public List<T> findByZ(int z, Pageable pageable)
  • Называйте это с Z и PageRequest, например:

    final PageRequest page1 = new PageRequest( 0, 1, Direction.ASC, "somefield" );

Применяется limit/rownnum на основе используемого вами db и дает вам записи.

+0

Привет, Даршан, спасибо за ответ. В принципе, я ищу ** решение QueryDSL ** для подзапросов типа выше (т. Е. Имеет подзапрос в инструкции FROM). – Harshal

Смежные вопросы