Можно ли использовать вложенные проекции в JPA?JAVA

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

Сообщение Anonymous »

Получение массива конкретных аккаунтов из базы данных, для каждого из которых в цикле выполняется другой запрос для получения его транзакций через проекцию XQuery:

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

@Query(value =
"select sum(txd.unit_amount) as amount, (0.9) as price, t.course as course " +
"   from transactions t                                                    " +
"            join transaction_x_details txd on t.id = txd.transaction_id   " +
"            join accounts a on t.account_id = a.id                        " +
"   where a.id = :accountId                                                " +
"     and t.operation_type = 10                                            " +
"     and t.created_at between :dateFrom and :dateTo                       " +
"   group by course                                                        ",
nativeQuery = true)
List findAllFromXByAccountIdAndPeriod(Long accountId, LocalDateTime dateFrom, LocalDateTime dateTo);
Проекция выглядит следующим образом:

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

public interface XQuery {
Long getAmount();
BigDecimal getPrice();
BigDecimal getCourse();
}
Было бы здорово сразу загрузить все данные одним запросом типа:

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

    @Query(value =
"select \"xQuery\", \"customerInn\"                                                                    " +
"from (select sum(txd.unit_amount) as amount, (p.value * t.course) as price, cs.inn as \"customerInn\" " +
"      from transactions t                                                                             " +
"               join transaction_x_details txd on t.id = txd.transaction_id                            " +
"               join accounts a on t.account_id = a.id                                                 " +
"               join categories ct on ct.id = a.category_id                                            " +
"               join customers cs on cs.id = a.customer_id                                             " +
"               join prices p on ct.price_id = p.id                                                    " +
"      where a.id in (:accountsId)                                                                     " +
"        and t.operation_type = 10                                                                     " +
"        and t.created_ts between :dateFrom and :dateTo                                                " +
"      group by price, \"customerInn\") as \"xQuery\"                                                  " +
"group by \"xQuery\", \"customerInn\"                                                                  ",
nativeQuery = true)
List findAllFromXByPeriodAndAccountIdIn(List accountsId,
LocalDateTime dateFrom,
LocalDateTime dateTo);
И в этом случае проекция XPackageQuery будет включать предыдущий XQuery следующим образом:

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

public interface XPackageQuery {
List getXQueries();
String getCustomerInn();
}
Но при таком подходе результат сопоставления будет следующим:
  • xQueries: всегда null;
  • customerInn: правильно.
Приемлемо ли такое использование структуры проекции? И есть ли более рациональные способы решения этой проблемы?
Примечания:
  • выполнил запрос напрямую , данные верны;
  • Ошибок в клиентском коде точно нет.


Подробнее здесь: https://stackoverflow.com/questions/784 ... ons-in-jpa
Ответить

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

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

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

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

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