background image

Traversing Relationships with an Input

<< Queries That Navigate to Related Entities | Queries with Other Conditional Expressions >>
<< Queries That Navigate to Related Entities | Queries with Other Conditional Expressions >>

Traversing Relationships with an Input

Navigating to Single-Valued Relationship Fields
Use the JOIN clause statement to navigate to a single-valued relationship field:
SELECT t
FROM Team t JOIN t.league l
WHERE l.sport =
'soccer' OR l.sport ='football'
In this example, the query will return all teams that are in either soccer or football leagues.
Traversing Relationships with an Input Parameter
SELECT DISTINCT p
FROM Player p, IN (p.teams) AS t
WHERE t.city = :city
Data retrieved
: The players whose teams belong to the specified city.
Description
: This query is similar to the previous example, but it adds an input parameter. The
AS
keyword in the FROM clause is optional. In the WHERE clause, the period preceding the
persistent variable city is a delimiter, not a navigation operator. Strictly speaking, expressions
can navigate to relationship fields (related entities), but not to persistent fields. To access a
persistent field, an expression uses the period as a delimiter.
Expressions cannot navigate beyond (or further qualify) relationship fields that are collections.
In the syntax of an expression, a collection-valued field is a terminal symbol. Because the teams
field is a collection, the WHERE clause cannot specify p.teams.city (an illegal expression).
See also
:
"Path Expressions" on page 749
Traversing Multiple Relationships
SELECT DISTINCT p
FROM Player p, IN (p.teams) t
WHERE t.league = :league
Data retrieved
: The players that belong to the specified league.
Description
: The expressions in this query navigate over two relationships. The p.teams
expression navigates the Player-Team relationship, and the t.league expression navigates the
Team
-League relationship.
In the other examples, the input parameters are String objects, but in this example the
parameter is an object whose type is a League. This type matches the league relationship field
in the comparison expression of the WHERE clause.
Example Queries
Chapter 27 · The Java Persistence Query Language
737