Запрос критериев JPA со встроенным представлением в предложении FROMJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Запрос критериев JPA со встроенным представлением в предложении FROM

Сообщение Anonymous »

Можно ли создать запрос, выбирающий из внутреннего представления, используя API критериев JPA?
Мы хотели бы создать эквивалент этого SQL-запроса:

Код: Выделить всё

select iv.customer_id, iv. latest_order_date,
case when exists (
select 1
from shipments sh
where sh.customer_id = iv.customer_id
and sh.ship_date = sh.latest_order_date
) then 1 else 0 end same_day
from (
select od.customer_id, max(od.order_date) latest_order_date
from orders od
group by od.customer_id
where od.area_id = 317 and od.status = 'new'
) iv

Код: Выделить всё

select od.customer_id ... status = 'new'
— это встроенное представление.
Причина, по которой мы хотели бы использовать API критериев и почему фиксированное представление или @Subselect не будет работать, заключается в том, что < em>where условие во встроенном представлении очень динамично и сложно, и его можно повторно использовать из других мест. Приведенный выше пример упрощен.
Главное, чего мы не можем понять, — это как использовать встроенное представление в качестве объекта для выбора для основного запроса, обозначенного ??? ниже:

Код: Выделить всё

var inlineView = criteriaBuilder.createTupleQuery();
var orderRoot = inlineView.from(OrderEntity.class);
orderRoot.groupBy(...);
orderRoot.multiselect(...);
orderRoot.where(...);

var mainQuery = criteriaBuilder.createTupleQuery();
var root = query.from( ??? );

var countQuery = mainQuery.subquery(Long.class);
var shipmentRoot = countQuery.from(ShipmentEntity.class);
shipmentRoot.where(...);

root.multiselect(...);
Альтернативный подход также будет оценен по достоинству. Но обратите внимание на проблему: подзапрос exists ссылается на агрегированный результат (

Код: Выделить всё

latest_order_date
) встроенного представления.


Подробнее здесь: https://stackoverflow.com/questions/790 ... rom-clause
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»