Create Bidirectional Relationships
In most cases, you define a relationship between two objects in both directions. For example, a relationship between a user and his manager might indicate a reverse relationship between the manager and her direct report. Reverse relationships are particularly useful for queries. You might want to query jdoe's user entry to discover who his manager is, or query bjensen's user entry to discover all the users who report to bjensen.
You declare a reverse relationship as part of the relationship definition. Consider the following sample excerpt of the default managed object configuration:
"reports" : { "description" : "Direct Reports", "title" : "Direct Reports", ... "type" : "array", "returnByDefault" : false, "items" : { "type" : "relationship", "reverseRelationship" : true, "reversePropertyName" : "manager", "validate" : true, ... } ...
The reports
property is a relationship
between users and managers. So, you can refer to a managed user's reports by referencing the reports
. However, the reports property is also a reverse relationship ("reverseRelationship" : true
) which means that you can list all users that reference that report.
You can list all users whose manager
property is set to the currently queried user.
The reverse relationship includes an optional resourceCollection
that lets you query a set of objects, based on specific fields:
"resourceCollection" : [ { "path" : "managed/user", "label" : "User", "query" : { "queryFilter" : "true", "fields" : [ "userName", "givenName", "sn" ] } } ]
The path
property of the resourceCollection
points to the set of objects to be queried. If this path is not in the local repository, the link expansion can incur a significant performance cost. Although the resourceCollection
is optional, the same performance cost is incurred if the property is absent.
The query
property indicates how you will query this resource collection to configure the relationship. In this case, "queryFilter" : "true",
indicates that you can search on any of the properties listed in the fields
array when you are assigning a manager to a user or a new report to a manager. To configure these relationships from the Admin UI, see "Manage Relationships Through the Admin UI".