4.2.2.2. One-to-Many: Two Levels of Nesting

Composition can be deeper, with up to two nested levels. Let’s extend the previous example by adding a MeetingPoint entity describing a meeting point at an airport terminal:

composition recipe 2

The Terminal entity contains the meetingPoints attribute – a collection of the MeetingPoint instances. In order for all three entities to become a single composition and be edited together, the following should be done in addition to the steps described above:

  • Terminal.java - the meetingPoints attribute of the Terminal class is marked as @Composition and @OnDelete similarly to the terminals attribute of the Airport class.

  • views.xml - the terminal-meetingPoints-view view of the Terminal class contains the meetingPoints collection attribute. This view is used in the airport-terminals-meetingPoints-view view of the Airport entity.

  • airport-edit.xml - the Airport edit screen XML descriptor contains datasources for an instance of the Airport and nested entities for the entire composition (airportDs > terminalsDs > meetingPointsDs).

    Here, the meetingPointsDs datasource is not associated with any visual components, however it is needed for correct operation of joint editing of the composition.

  • terminal-edit.xml - the terminal edit screen XML descriptor contains a nested datasource and a corresponding table for the meetingPoints collection.

As a result, the updated instances of the MeetingPoint, as well as the Terminal instances, will be saved to the database only with the Airport instance in the same transaction.