-
Notifications
You must be signed in to change notification settings - Fork 139
[Java] Document references #2153
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from 22 commits
e0c19c6
3cfdad1
36fbf31
801631e
caa3892
b1a24dd
92a0ac3
f295189
0f14609
fb7591f
7a5c3c3
5d740ce
4a67d72
2e7d155
51b74cd
91b2f00
5002237
1b1f731
881693f
278e74a
46ecab7
b47d480
761a620
483e0a9
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -131,7 +131,6 @@ In the [CDS Query Language (CQL)](/cds/cql) builder, the lambda expression `o -> | |||||
| To target components of a structured document, we recommend using path expressions with infix filters. | ||||||
| ::: | ||||||
|
|
||||||
|
|
||||||
| ### Filters {#target-entity-filters} | ||||||
|
|
||||||
| Besides using infix filters in path expressions, the `Select`, `Update`, and `Delete` builders support filtering the [target entity set](#target-entity-sets) via the `where` method. Using `where` is equivalent to defining an infix filter on the last segment of a path expression in the statement's `from` / `entity` clause. For statements that have both, an infix filter on the last path segment and a `where` filter, the resulting target filter is the conjunction (`and`) of the infix filter and the `where` filter. | ||||||
|
|
@@ -1309,24 +1308,123 @@ The Query Builder API supports using expressions in many places. Expressions con | |||||
|
|
||||||
| ### Entity References {#entity-refs} | ||||||
|
|
||||||
| Entity references specify entity sets. They can be used to define the target entity set of a [CQL](../../cds/cql) statement. They can either be defined inline using lambda expressions in the Query Builder (see [Target Entity Sets](#target-entity-sets)) or via the `CQL.entity` method, which is available in an _untyped_ version as well as in a _typed_ version that uses the generated [model interfaces](../cqn-services/persistence-services#model-interfaces). The following example shows an entity reference describing the set of *authors* that have published books in the year 2020: | ||||||
| Entity references specify entity sets and can define the target entity set of a [CQL](../../cds/cql) statement or serve as an argument for event handlers. | ||||||
|
||||||
|
|
||||||
| A reference consists of _segments_ that define the path from the entity's root to a certain part of it. Each segment has the _identifier_ with the name of the entity or an element and an optional filter _predicate_. These predicates might include other references. The references are not bound to the particular model and are not checked against it while they are being built. | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Use active voice instead of passive voice. Change 'References are not bound to the particular model and are not checked against it while they are being built' to 'The system does not bind references to a particular model and does not check them against it during construction.'
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Use present tense instead of future tense. The phrase "are not checked against it while they are being built" should be "are not checked against it during construction" to maintain present tense throughout. Suggested revision:
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This sentence uses passive voice and is unclear. Consider revising to: "The system does not bind references to a particular model and does not check them against it while building them." |
||||||
|
|
||||||
| References can be either _absolute_ or _relative_. Absolute references always have the fully qualified name of the type in their first segment. | ||||||
|
|
||||||
| The simplest kind of absolute reference is a reference to the entity set, for example, to all books. | ||||||
|
|
||||||
| ```java | ||||||
| import com.sap.cds.ql.CQL; | ||||||
| Books_ books = CQL.entity(Books_.class); // {"ref":["sap.capire.bookshop.Books"]} | ||||||
|
|
||||||
| StructuredTypeRef ref = bookWithId.asRef(); // or CqnStructuredTypeRef which is a cleaner equivalent type | ||||||
| ``` | ||||||
|
|
||||||
| The method `asRef()` seals the reference and makes it immutable. | ||||||
|
|
||||||
| Relative references do not specify the type in the first segment and are [element references](/java/working-with-cql/query-api#element-refs) most of the time. | ||||||
|
||||||
| Relative references do not specify the type in the first segment and are [element references](/java/working-with-cql/query-api#element-refs) most of the time. | |
| Relative references do not specify the type in the first segment and are [element references](#element-refs) most of the time. |
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Use active voice and improve clarity. Change "New references are constructed" to "You construct new references" for better readability and active voice.
Suggested revision:
You construct new references with [model interfaces](../cqn-services/persistence-services#model-interfaces) or via API that is also used to build [CQL statements](/java/working-with-cql/query-api#concepts). Prefer model interfaces in the application code.
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The sentence structure is unclear and uses passive voice. Consider revising to:
"You construct new references with model interfaces or via the API that you also use to build CQL statements. Use model interfaces in application code."
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| New references are constructed with [model interfaces](../cqn-services/persistence-services#model-interfaces) or via API that is also used to build [CQL statements](/java/working-with-cql/query-api#concepts). Prefer model interfaces in the application code. | |
| New references are constructed with [model interfaces](../cqn-services/persistence-services#model-interfaces) or via API that is also used to build [CQL statements](#concepts). Prefer model interfaces in the application code. |
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| Given a simple reference pointing to the book created as follows. | |
| For the upcoming examples, let's assume a simple reference pointing to the book created as follows: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The sentence uses passive voice. Consider revising to:
"Such references are usually relative and form the select list for a CQL statement or an expand."
renejeglinsky marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| Element references can be extended with the same APIs as the entity references. | |
| Element references can be extended with the same APIs as the [entity references](#entity-refs). |
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The sentence uses passive voice. Consider revising to:
"You rarely use absolute element references."
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Use active voice instead of passive voice. Change "They can be used" to "You can use them" for better clarity and directness.
Suggested revision: