Кастомный фильтр (без дефолтного). Создание коллекции с JPQL запросом для dataContainer для поиска по всем записям

Всем здравствуйте. Я убрал дефолтный фильтр. Создал кастомный. Фильтр работает, но при загрузке экрана таблица не выводит все записи на экран. Возникла необходимость в их отображение при открытии экрана

Вопрос. Как это можно реализовать?

Предполагаю, что для этого нужно создать новую коллекцию для первичной загрузки. С последующим присвоением в dataContainer.
Только вопрос. Как сформировать запрос JPQL.

Screenshot_878

Screenshot_881

Screenshot_882

Screenshot_880

Нет, это не поможет и такого “шаманства” требуется.
Тут дело в механизме статистики сущностей (EntityStatistics). А данные этой статистики влияют на автоматическое приятие решения об ограничении размера выборки данных на экран.
Без этого даже на не очень больших объемах данных можно получить большие проблемы производительности.
Если сущность простая, с локальными атрибутами небольшой емкости (как у вас) и в БД 1000 записей - это еще не сильно страшно.
А если десятки тысяч записей или если сущность не простая, а со ссылочными атрибутами и серьезным графом загружаемых на экран атрибутов?

Если коротко, то механизм статистики сущностей в любом случае, даже если вы не используете универсальный фильтр, накладывает определенные ограничения на количество загружаемых на контейнер экрана данных.

Обратите там внимание на fetchUI и maxFetchUI.
Последний атрибут как раз отвечает за максимальное число записей сущности, которое может передано на экран в контейнер без постраничной загрузки (т.е. не использующий универсального фильтра).
Эти атрибуты можно установить программно или через администрирование/Консоль JMX.
Посмотрите какие значения установлены в атибутах fetchUI и maxFetchUI для вашей сущности.
Поумолчанию maxFetchUI = 10000, но значение может меняться в ходе работы системы на основе статистики сущностей и “стиля работы” приложения с данными.

Как я понял, у вас ранее универсальный фильтр использовался, значит в этих атрибутах могут быть значения отличные от умолчательных, которые остались от работы фильтра.
Установите в fetchUI и maxFetchUI нужное вам значение, но с осознанием того, что от этой цифры зависит объем передаваемых на клиентский уровень данных и отзывчивость экрана, работающего с коллекцией данной сущности.

1 симпатия

Спасибо за ответ! Только, если не сложно, можете написать алгоритм решения по пунктам?

Присылаю вам архитектуру приложения, если поможет.

Screenshot_886

Screenshot_887

Заходите в приложение под admin в меню Администрирование/Консоль JMX и ищите нужный бин по Object name открываете двойным кликом консоль этого бина.
image

Ищем раздел showStatistics, вводим имя вашей сущности и кликаем Запустить.
image

Если статистика для этой сущности есть - увидите ее во диалоговом окне.
Наверняка в статистике maxFetchUI и fetchUI будут меньше, чем вам нужно для отображения всех записей на одной странице.

Далее ищем раздел enterStatistics, вводим ваше имя сущности и в maxFetchUI нужный вам лимит числа записей для отображения для передачи на клиента. Кликаем Запустить.
image

Теперь можно вернуться к showStatistics и убедиться, что нужное значение атрибута установлено.

Но в случае отсутствия статистики для сущности в качестве лимита передачи на клиента используется значение атрибута DefaultMaxFetchUI.
Его можно задать среди прочих умолчательных значений атрибутов в самом начале экрана просто открыв редактирование значения двойным кликом.
image

После этого картина выдачи числа записей на экране должна измениться.

Ну и в нужном лоадере на нужном экране вы можете программно точечно задать ограничение числа загружаемых сущностей в конкретный контейнер: phonebookDl.setMaxResults(30000)

1 симпатия