7.1.2.1. 一对多:一级嵌套

在线示例

让我们以 AirportTerminal 实体实现一对多组合示例:

composition recipe 1

  • Terminal.java - Terminal 实体包含指向 Airport 的必要链接。

在 Studio 实体设计器中,设置 airport 属性: Attribute type - ASSOCIATION,Cardinality - MANY_TO_ONE,Mandatory - ON。

  • Airport.java - Airport 实体包含一对多的航站楼集合。相应的字段使用 @Composition 注解以实现组合关系,而 @OnDelete 注解用于级联软删除。

在 Studio 实体设计器中,设置 terminals 属性: Attribute type - COMPOSITION,Cardinality - ONE_TO_MANY,On delete - CASCADE。

  • views.xml - 机场编辑界面的 airport-terminals 视图包含 terminals 集合属性。我们为此属性使用 _local 视图,因为 Terminal 实体的 airport 属性只在创建新的 Terminal 实例时设置并且在此之后永远不会改变,所以我们不需要加载它。

  • airport-edit.xml - 机场编辑界面的 XML 描述定义了用于 Airport 实例的数据源和用于其航站楼的嵌套实例,它还包含一个显示航站楼的表格。

  • terminal-edit.xml - 一个 Terminal 实体的标准编辑界面。

因此,机场实例的编辑工作如下:

  • 机场编辑界面显示航站楼列表。

  • 用户可以选择航站楼并打开其编辑界面。当在航站楼编辑界面中点击 OK 时,航站楼的更新实例不会保存到数据库,而是保存到机场编辑界面的 terminalsDs 数据源。

  • 用户可以创建新的航站楼和删除现有航站楼。所有改变都将保存到 terminalsDs 数据源。

  • 当用户在机场编辑界面点击 OK 时,更新的 Airport 实例与所有更新的 Terminal 实例将一起被提交到中间层的 DataManager.commit() 方法并使用单个事务保存到数据库中。