Код Значения не изменяется при изменении кода Атрибута

Добрый день!

Когда пользователь изменяет код динамического Атрибута CategoryAttribute.code, то код Значения динамического атрибута остается прежним CategoryAttributeValue.code. Такое поведение приводит к множественным Значениям динамических атрибутов (дублям) и к некорректной их работе.

описание некорректной работы

Сценарий:

*предварительное условие - в приложение добавлены динамические атрибуты и их значения.

  1. Открыть экран редактирования динамического Атрибута и изменить код;
  2. Сохранить изменения и применить (Кнопка применить изменения на списочном экране Категорий);
  3. Отрыть окно редактирования сущности, для которой добавлен динамический атрибут и существует значение, и изменить его значение;

При этом в базу данных добавляется повторное Значение (связанное с тем же category_attr_id и той же entity_id), но с новым кодом.
Если упорядочить эти Значения по id и то, что новое будет после старого, то при отображении на экране редактирования сущности будет отображаться всегда старое Значение атрибута, а при попытке изменить, значение будет меняться в новом.
В некоторых случаях Значения продолжают множиться дальше.

Все это было обнаружено в мигрированных с CUBA проектов, где коды Атрибутов могли быть на кириллице, а скриптов миграции Значений и Атрибутов не предусмотрено.

обходное решение

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

@EventListener(ApplicationReadyEvent.class)
    public void migrateDynamicAttributes(){
        log.debug("Migration dynamic attributes started");

        systemAuthenticator.runWithSystem(() -> {
            //удаление повторных значений динамических атрибутов.
            this.deleteDuplicateCategoryAttributeValue();
            //миграция кодов динамических атрибутов.
            this.migrateCategoryAttribute();
            //миграция кодов значений динамических атрибутов.
            this.migrateCategoryAttributeValue();
            //очистить кэш
            dynAttrMetadata.reload();
        });

        log.info("Dynamic attributes migrated");
    }