局限性

本节介绍动态模型扩展组件当前的局限性和约束。有关下面所用术语的解释,请参见 概念

存储与数据存储

  • 存储静态实体动态属性的侧表在与所属静态实体相同的数据存储中创建。

  • 仅支持基于 JPA 的数据存储:主数据存储和类型为 JpaDataStore 的附加数据存储。

  • 动态引用和动态集合仅支持在属于同一数据存储的实体之间使用。

标识符约束

  • 动态引用属性不支持复合标识符:目标实体只能有单一 ID。

  • 动态集合属性不支持拥有复合标识符的静态父实体。

集合

动态集合属性仅支持有序的 List 组合。

查询语句支持

不支持在数据库中对某些条件的动态过滤和排序。

  • 对于静态根实体和动态根实体的加载,以下条件不支持:

    • 日期/时间宏条件。

    • 基于集合值动态属性路径的条件。

    • 按计算型属性过滤和排序(这些属性在访问时计算,不存储在数据库中)。

  • 对于动态根实体的加载(被查询的实体是动态实体),以下不支持的额外条件:

    • JPQL 条件。

    • 集合成员操作。

管理 UI 模型编辑

管理 UI 保留动态模型配置的语义,但在图形化编辑器与模型 YAML 文件之间转换时,不会保留原始 YAML 格式、注释、锚点、别名或 model 部分的键值顺序。

任意的嵌套对象值,例如验证的 parameters 和视图的 templateParams,会作为原始 YAML 片段进行编辑。这能保持这些值的类型,但不为这类嵌套对象提供类型化的图形编辑器。

应用原子性作用域

新元数据的发布是原子性的;但是,对元数据和结构对象的破坏性清理会延迟,直至前一个模型版本不再被进行中的工作使用为止。然而,在发布之前执行的附加性工作不是事务性的,如果发布失败则不会回滚:

  • 失败的发布可能会在数据库中留下附加性的表、列或唯一约束;但是不包含数据,在发布成功前也不会有数据。这些遗留的结构在下一次发布过程中会被重用。

  • 失败的发布可能会在 JVM 生命周期内将生成的实体和枚举类加载到内存中。这对数据库或程序的正确性没有影响,并会在下一次成功发布时被覆盖。

  • 动态视图的部署在元数据发布之后运行,不作为原子性发布的一部分。视图声明在发布之前验证,但如果之后部署失败,新的模型已经生效,而某些动态视图可能缺失或过期。重新发布模型可以恢复视图。

应用程序集群

当前实现不支持在应用程序集群中运行。仅支持单一应用程序服务器实例处理动态模型,因为在一个实例上发布的模型不会在运行时广播到其他实例。集群支持计划在下一个 Jmix 版本中提供。