Ограничения
В этом разделе описаны текущие ограничения дополнения Dynamic Model. Объяснение используемых ниже терминов см. в разделе Концепции.
Хранение и хранилища данных
-
Дополнительные таблицы, в которых хранятся динамические атрибуты статической сущности, всегда создаются в том же хранилище данных, что и владеющая ими статическая сущность.
-
Поддерживаются только хранилища данных на основе JPA: основное и дополнительные с типом
JpaDataStore. -
Динамические ссылки и динамические коллекции разрешены только между сущностями, принадлежащими одному хранилищу данных.
Ограничения идентификаторов
-
Динамические ссылочные атрибуты не поддерживают составные идентификаторы: целевая сущность должна иметь простой ID.
-
Динамические атрибуты-коллекции не поддерживаются для статических владельцев, имеющих составной идентификатор.
Поддержка запросов
Динамическая фильтрация и сортировка в базе данных поддерживают не все виды условий.
-
Как для загрузок со статическим корнем, так и для загрузок с динамическим корнем не поддерживаются:
-
Макросы даты/времени.
-
Условия по путям динамических атрибутов со значениями-коллекциями.
-
Фильтрация и сортировка по вычисляемым атрибутам (они вычисляются при обращении и не хранятся в базе данных).
-
-
Для загрузок с динамическим корнем (где запрашиваемая сущность является динамической) дополнительно не поддерживаются:
-
Условия JPQL.
-
Операции с членами коллекций.
-
Редактирование модели в административном UI
Административный UI сохраняет семантику конфигурации Динамической модели, но преобразование модели в графический редактор и обратно не сохраняет исходное форматирование YAML, комментарии, якоря, псевдонимы или порядок ключей раздела model.
Произвольные вложенные значения объектов, такие как parameters валидации и templateParams экрана, редактируются как необработанные YAML-фрагменты. Это сохраняет их типы значений нетронутыми, но не предоставляет типизированного графического редактора для таких вложенных объектов.
Атомарность применения
Публикация новых метаданных является атомарной, а деструктивная очистка удалённых метаданных и объектов схемы откладывается до тех пор, пока предыдущее поколение модели больше не используется выполняющимися операциями. Однако аддитивная работа, выполняемая до публикации, не является транзакционной и не откатывается, если применение завершается неудачей:
-
Неудачное применение может оставить в базе данных аддитивные таблицы, столбцы или ограничения уникальности. Они не содержат данных и никогда не заполняются, пока опубликованное поколение модели не сошлётся на них. Они повторно используются при следующем применении.
-
Неудачное применение может оставить сгенерированные классы сущностей и перечислений загруженными в память на время жизни JVM. Это не влияет на базу данных или корректность и перезаписывается при следующем успешном применении.
-
Развёртывание динамических экранов выполняется после публикации метаданных, а не как часть атомарного применения. Объявления экранов проверяются до применения, но если развёртывание завершается неудачей после этого, новое поколение модели уже работает, в то время как некоторые динамические экраны могут отсутствовать или быть устаревшими. Повторное применение модели восстанавливает экраны.
Кластер серверов приложения
Текущая реализация не поддерживает работу в кластере. Только один экземпляр сервера приложения может работать с динамической моделью, потому что модель, примененная на одном экземпляре, не распространяется на другие во время выполнения. Поддержка кластера запланирована для следующего релиза Jmix.