7.1.2.1. 一对多:一级嵌套
让我们以 Airport 和 Terminal 实体实现一对多组合示例:
-
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() 方法并使用单个事务保存到数据库中。