Size: a a a

2021 April 05

DC

Denis Chikanov in pro.jvm
@dmsol @igorz варез
источник

SP

Sergey Pavlenko in pro.jvm
Добрый день. Помогите победить N+1 запрос.
Есть три сущности/таблицы Абонемент<-->Клиент<-->Визит

Нужен отчёт по активным абонементам с полями: Абонемент, Клиент, Последний визит.
Делаю запрос на получение Абонементов, подтягиваю через JOIN FETCH клиентов, тут всё ок.
Но вот чтобы получить визиты по клиенту (причём нужны же не все, а только максимальная дата) хибер естественно опять лезет в БД по каждому клиенту...
источник

SP

Sergey Pavlenko in pro.jvm
@Query(value = "FROM Abonement a " +
           "JOIN FETCH a.abonType " +
           "JOIN FETCH a.client " +
           "JOIN FETCH a.contentItems i " +
           "WHERE i.product.id = :productId AND a.statusId = :statusId")
   List<Abonement> findAllByStatusIdAndContainsProductId(@Param(value = "statusId") int statusId,
                                                         @Param(value = "productId") int productId);
источник

SP

Sergey Pavlenko in pro.jvm
Блин, хотел для наглядности пару скринов, а тут низяя..
источник

SP

Sergey Pavlenko in pro.jvm
Задача решается через родной SQL запрос через GROUP BY и агрегатной MAX(), но монжо ли такое решить в рамках HQL
источник

D

Denis in pro.jvm
Sergey Pavlenko
Задача решается через родной SQL запрос через GROUP BY и агрегатной MAX(), но монжо ли такое решить в рамках HQL
А что если попробовать через аннотацию @Subselect? Создать отдельный класс-вьюху, где в @Subselect пишется запрос к БД.

вот пример:
https://vladmihalcea.com/map-jpa-entity-to-view-or-sql-query-with-hibernate/
источник

РН

Роман Нагаев... in pro.jvm
Sergey Pavlenko
Добрый день. Помогите победить N+1 запрос.
Есть три сущности/таблицы Абонемент<-->Клиент<-->Визит

Нужен отчёт по активным абонементам с полями: Абонемент, Клиент, Последний визит.
Делаю запрос на получение Абонементов, подтягиваю через JOIN FETCH клиентов, тут всё ок.
Но вот чтобы получить визиты по клиенту (причём нужны же не все, а только максимальная дата) хибер естественно опять лезет в БД по каждому клиенту...
не пытайся фильтровать содержимое связей, они для этого не предназначены, а для отчёта лучше использовать что-то другое вместо хибера, в тч нативный запрос
источник

SP

Sergey Pavlenko in pro.jvm
Роман Нагаев
не пытайся фильтровать содержимое связей, они для этого не предназначены, а для отчёта лучше использовать что-то другое вместо хибера, в тч нативный запрос
расшифруйте, пжл, про фильтр связей..

ок, я сделал нативный запрос и получил данные с полями:
id_abon | id_client | last_visit

Это точно мне нужно, но у меня нет такой сущности (с такими полями), тогда мне надо сделать ReportDTO с этими полями?? и отдать его слою сервиса -> вью? Как-то костыльно...
источник

SP

Sergey Pavlenko in pro.jvm
Denis
А что если попробовать через аннотацию @Subselect? Создать отдельный класс-вьюху, где в @Subselect пишется запрос к БД.

вот пример:
https://vladmihalcea.com/map-jpa-entity-to-view-or-sql-query-with-hibernate/
про SubSelect сейчас покурю... Правда у меня ссыль почему-то не открывается.
источник

u

user576 in pro.jvm
http://localhost:8080/Draft_Dynamic_Web_Project/handler?input-str=aasdf

Я же всё правильно понимаю? input-str можно получить через request.getAttribute("input-str"); ?
источник

РН

Роман Нагаев... in pro.jvm
Sergey Pavlenko
расшифруйте, пжл, про фильтр связей..

ок, я сделал нативный запрос и получил данные с полями:
id_abon | id_client | last_visit

Это точно мне нужно, но у меня нет такой сущности (с такими полями), тогда мне надо сделать ReportDTO с этими полями?? и отдать его слою сервиса -> вью? Как-то костыльно...
ну ты же хочешь вывести только последний визит по клиенту а не все? и сделать это через связь
источник

РН

Роман Нагаев... in pro.jvm
user576
http://localhost:8080/Draft_Dynamic_Web_Project/handler?input-str=aasdf

Я же всё правильно понимаю? input-str можно получить через request.getAttribute("input-str"); ?
источник

u

user576 in pro.jvm
Там не отвечают. есть идея поменять на getParameter
источник

DC

Denis Chikanov in pro.jvm
user576
Там не отвечают. есть идея поменять на getParameter
Есть рекомендация прочитать джавадок к классу, экземпляром которого является request.
А что в лёрне ответили, стоит задавать полноценный вопрос, не требующий телепатии и встречных расспросов
источник

u

user576 in pro.jvm
Сэнкс)
источник

B1

Burevesnik 1960 in pro.jvm
Хай, как можно определить IP адрес, где работает бекенд (может в спринге)?
источник

ch

central hardware in pro.jvm
Burevesnik 1960
Хай, как можно определить IP адрес, где работает бекенд (может в спринге)?
публичный? curl ifconfig.me
источник

С

С in pro.jvm
ip a
источник

B1

Burevesnik 1960 in pro.jvm
Та нет, мне через бек как то автомато подтягивать
источник

B1

Burevesnik 1960 in pro.jvm
может спринг где то как то хранит
источник