Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "Sandbox.bg.oracle.com\fetch groups"

m
(Removing all content from page)
 
(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);
 

Latest revision as of 12:56, 25 May 2011

Back to the top