|
|
(5 intermediate revisions by the same user not shown) |
Line 1: |
Line 1: |
− | ---
| |
| | | |
− | ''From "Using EclipseLink JPA Extensions (ELUG)"'' - http://wiki.eclipse.org/Using_EclipseLink_JPA_Extensions_%28ELUG%29
| |
− | JoinFetch
| |
− |
| |
− | ---
| |
− |
| |
− | ''From "Optimizing the EclipseLink Application (ELUG)"'' - http://wiki.eclipse.org/Optimizing_the_EclipseLink_Application_%28ELUG%29
| |
− | under
| |
− | 11 Optimizing Queries
| |
− | 11.4 How to Use Partial Object Queries and Fetch Groups for Optimization
| |
− |
| |
− |
| |
− | ----
| |
− |
| |
− | ''from "Using Advanced Query API (ELUG)"'' - http://wiki.eclipse.org/Using_Advanced_Query_API_%28ELUG%29
| |
− |
| |
− | ==Using Queries with Fetch Groups==
| |
− |
| |
− | You can use a fetch group with a <tt>ReadObjectQuery</tt> or <tt>ReadAllQuery</tt>. When you execute the query, EclipseLink retrieves only the attributes in the fetch group. EclipseLink automatically executes a query to fetch all the attributes excluded from this subset when and if you call a getter method on any one of the excluded attributes.
| |
− |
| |
− | <br />
| |
− |
| |
− | {| class="Note oac_no_warn" width="80%" border="1" frame="hsides" rules="groups" cellpadding="3" frame="hsides" rules="groups"
| |
− | | align="left" |
| |
− | '''Note:''' When you use fetch groups outside of CMP, use weaving (see [[Introduction%20to%20EclipseLink%20Application%20Development%20(ELUG)|Using Weaving]]).
| |
− | |}
| |
− |
| |
− | <br />
| |
− |
| |
− | This section describes the following:
| |
− |
| |
− | * [[#How to Configure Default Fetch Group Behavior|How to Configure Default Fetch Group Behavior]]
| |
− | * [[#How to Query with a Static Fetch Group|How to Query with a Static Fetch Group]]
| |
− | * [[#How to Query with a Dynamic Fetch Group|How to Query with a Dynamic Fetch Group]]
| |
− |
| |
− | For more information about fetch groups, see [[Introduction%20to%20EclipseLink%20Queries%20(ELUG)#Fetch Groups and Object-Level Read Queries|Fetch Groups and Object-Level Read Queries]].
| |
− |
| |
− |
| |
− | ===How to Configure Default Fetch Group Behavior===
| |
− |
| |
− | You can optionally designate at most one fetch group as the default fetch group for a descriptor's reference class.
| |
− |
| |
− | If you execute a <tt>ReadObjectQuery</tt> or <tt>ReadAllQuery</tt> without specifying a fetch group, EclipseLink will use the default fetch group unless you configure the query otherwise, as this example shows.
| |
− |
| |
− |
| |
− | <span id="Example 107-3"></span>
| |
− | ''''' Configuring Default Fetch Group Behavior'''''
| |
− | '''// at the descriptor level'''
| |
− | FetchGroup group = new FetchGroup("nameOnly");
| |
− | group.addAttribute("firstName");
| |
− | group.addAttribute("lastName");
| |
− | employeeDescriptor.getFetchGroupManager().addFetchGroup(group);
| |
− | '''// set the default fetch group'''
| |
− | employeeDescriptor.getFetchGroupManager().setDefaultFetchGroup(group);
| |
− |
| |
− | '''// when query1 is executed, the default fetch group applies'''
| |
− | ReadAllQuery query1 = new ReadAllQuery(Employee.class);
| |
− |
| |
− | '''// when query2 is executed, the default fetch group does not apply'''
| |
− | ReadAllQuery query2 = new ReadAllQuery(Employee.class);
| |
− | query2.setShouldUsedefaultFetchGroup(false);
| |
− |
| |
− |
| |
− | ===How to Query with a Static Fetch Group===
| |
− |
| |
− | [[#Example 107-4|Configuring a Query with a FetchGroup Using the FetchGroupManager]] shows how to configure a <tt>ReadObjectQuery</tt> for the <tt>Employee</tt> class with a <tt>FetchGroup</tt> named <tt>nameOnly</tt> previously stored in the <tt>FetchGroupManager</tt> owned by the <tt>Employee</tt> class's descriptor.
| |
− |
| |
− |
| |
− | <span id="'Example 107-4"></span>
| |
− | '''' Configuring a Query with a FetchGroup Using the FetchGroupManager'''''
| |
− |
| |
− | In this example, only the <tt>Employee</tt> attributes <tt>firstName</tt> and <tt>lastName</tt> are fetched. If you call the <tt>Employee</tt> method <tt>get</tt> for any other attribute, EclipseLink executes another query to retrieve all unfetched attribute values. Thereafter, calling that <tt>get</tt> method will return the value directly from the object.
| |
− |
| |
− |
| |
− | '''// create static fetch group at the descriptor level'''
| |
− | FetchGroup group = new FetchGroup("nameOnly");
| |
− | group.addAttribute("firstName");
| |
− | group.addAttribute("lastName");
| |
− | descriptor.getFetchGroupManager().addFetchGroup(group);
| |
− |
| |
− | '''// use static fetch group at query level'''
| |
− | ReadAllQuery query = new ReadAllQuery(Employee.class);
| |
− | query.setFetchGroupName("nameOnly");
| |
− |
| |
− |
| |
− | ===How to Query with a Dynamic Fetch Group===
| |
− |
| |
− | [[#Example 107-5|Configuring a Query with a FetchGroup Dynamically]] shows how to create a <tt>FetchGroup</tt> instance dynamically, at the time you create and execute a query, and configure the query with that <tt>FetchGroup</tt> directly.
| |
− |
| |
− | In this example, only the <tt>firstName</tt>, <tt>lastName</tt>, and <tt>salary</tt> attributes are fetched. If you call the <tt>Employee</tt> method <tt>get</tt> for any other attribute, EclipseLink executes another query to retrieve all unfetched attribute values. Thereafter, calling that <tt>get</tt> method will return the value directly from the object.
| |
− |
| |
− |
| |
− | <span id="Example 107-5"></span>
| |
− | ''''' Configuring a Query with a FetchGroup Dynamically'''''
| |
− |
| |
− |
| |
− | '''// dynamic fetch group query'''
| |
− | ReadAllQuery query = new ReadAllQuery(Employee.class);
| |
− | FetchGroup group = new FetchGroup("nameAndSalary");
| |
− | group.addAttribute("firstName");
| |
− | group.addAttribute("lastName");
| |
− | group.addAttribute("salary");
| |
− | query. setFetchGroup(group);
| |