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() 方法并使用单个事务保存到数据库中。