7.1.2.2. 一对多:二级嵌套

在线示例

组合关系可以更深,但是最多到两个嵌套级别,我们通过添加用于描述航站楼汇合点的 MeetingPoint 实体来扩展前一个示例:

composition recipe 2

Terminal 实体包含 meetingPoints 属性 – 一个 MeetingPoint 实例的集合。为了使所有三个实体成为一个组合并一起编辑,除了之前描述的步骤外,还应完成以下步骤:

  • Terminal.java - Terminal 类的 meetingPoints 属性带有 @Composition@OnDelete 注解,跟 Airport 类的 terminals 属性类似。

  • views.xml - Terminal 类的 terminal-meetingPoints-view 视图包含 meetingPoints 集合属性。该视图在 Airport 实体的 airport-terminals-meetingPoints-view 视图中使用。

  • airport-edit.xml - Airport 编辑界面 XML 描述,包含 Airport 的实例的数据源和整个组合(airportDs > terminalsDs > meetingPointsDs)的嵌套实体。

这里,meetingPointsDs 数据源不与任何可视化组件关联,但是用于正确处理组合的联合编辑。

  • terminal-edit.xml - 航站楼编辑界面 XML 描述,包含嵌套数据源以及对应于 meetingPoints 集合的表格。

这样,更新的 MeetingPoint 实例以及 Terminal 实例将仅与 Airport 实例在同一事务中一起保存到数据库。