Проблемы с сортировкой(разное поведение при одинаковом коде)

Есть две сборки идентичные по коду, но с разными базами данных. В одной сборке в одном из списков не работает сортировка ни по одному полю. в другой - всё нормально.

Похоже на какие-то пользовательские настройки окна или таблицы или сущности в сборке(код идентичен, отличаются только базы, - отличаются существенно).

Подскажите, плиз, куда смотреть - таблица пользовательских настроек таблиц какая-нибудь …?

Здравствуйте,

Какая версия Jmix 1.x или 2.x?

Расскажите, пожалуйста, поподробнее. Не работает в каком плане, при нажатии на название колонки не отрабатывает сортировка или при открытии экрана, или в другой случай?

С Уважением,
Никита

jmix 1.4.4
не работает в плане того, что на шапке таблице в колонке нажимаешь чтобы колонка сортировалась и в одном случае - сортируется нормально, в другом - не сортируется так, как будто вообще нет события нажатия на название колонки. только в одной конкретной таблице(экране списка) это. в других списках, других сущностей всё нормально - разницы между сборками нет.

ещё заметил, что настройки таблицы по ширине заданные в одном окне сохраняются для таблицы этой сущности в другом окне(классе), что не всегда нормально. помню, что за хранение этих данных отвечает какая-то таблица, но забыл какая и не могу наобум быстро найти… и можно ли отключить такое поведение.

Таблица с настройками экрана называется ui_Setting. Вы можете открыть через Entity Inspector и посмотреть какие настройки добавлены для пользователей.

image

А на какой БД не работает сортировка и какой тип данных у этой колонки?

тип данных любой, все колонки их там много. они стандартные, не генерируются кодом(гм, в том смысле, что не гренерируются кастомно в контроллере).
вопрос про базу не очень понятен… на “дефолтной”, “пустой”, “стартовой” базе системы - сортировка работает.
на базе, которая немного забита данными и на ней делали разное тестирование проекта - там не работает. но код с одной ветки git-а.

Таблица ui_Setting хранит в себе информацию о сортировке таблицы, а также о ширине колонок, но она не хранит информацию о запрете сортировки.

Описанное вами поведение напоминает случай, когда на таблицу добавляют атрибут sortable="false", но в таком случае сортировка не работала бы на любой БД. Пока сложно понять причину проблемы. У вас есть возможность выслать тестовый проект или создать демо-проект только с проблемными экранами, в котором воспроизводится проблема.

С Уважением,
Никита

Нет ли в каталоге запуска приложения каталога .jmix/conf ? В этот каталог на этапе выполнения приложения можно подкладывать скомпилированные классы и дескрипторы окна. Может быть на проблемной инстанции кто-то положил такие файлы.

нет к сожалению не в этом дело…
подумаю как сделать демо проект, но подозреваю, что ситуация какая-то уникальная, а не системная.

демо проект … боюсь не могу выслать - не воспроизводится на простом куске кода. могу показать например через дискорд сам факт наличия явления или видео записать. )

сортировка выглядит так, как будто она отрабатывает нормально- т.е. нажимаем на стрелочку - вверху побежал червяк обработки, но поля остались в том же порядке по всем колонкам таблицы так, вне зависимости от типа данных. Возможно что-то в компораторе “распознаётся” так, что он не может изменить последовательность записей… какие-то свойства данных…

похоже это имеет место, когда вместо “стандартной” схемы загрузки данных мы грузим список через -

@Install(to = “templatesDl”, target = Target.DATA_LOADER)
private List templatesDlLoadDelegate(LoadContext loadContext) {

}

в этом случае собственно и пагинатор не работает нормально.
наверняка, что-то типическое - 100% на такое уже жаловались, кто оптимизацией загрузки занимался.
киньте, может быть ссылок, на направления решений.

Здравствуйте,

Да, вы правы. В таком случае сортировка по умолчанию не работает. Вы можете самостоятельно проставить поля для сортировки, например таким способом:

    @Autowired
    private DataManager dataManager;
    @Autowired
    private CollectionLoader<User> usersDl;

    @Install(to = "usersDc", target = Target.DATA_CONTAINER, subject = "sorter")
    private void usersDcSorter(final Sort sort) {
        usersDl.setSort(sort);
        usersDl.load();
    }


    @Install(to = "usersDl", target = Target.DATA_LOADER)
    private List<User> usersDlLoadDelegate(final LoadContext<User> loadContext) {
        LoadContext.Query query = loadContext.getQuery();
        return dataManager.load(User.class)
                .query("select e from User e")
                .sort(query.getSort())
                .list();
    }

С Уважением,
Никита

Спасибо, ещё бы пример/направление как вернуть функциональность пагинатору при такой загрузке данных.

У Query есть firstResult и maxResults у ByQuery загрузчика так-же есть методы firstResult(int firstResult) и maxResults(int maxResults)