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)
 
(2 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
 
 
 
===How to Use Partial Object Queries and Fetch Groups for Optimization===
 
 
Partial object queries let you retrieve partially populated objects from the database rather than complete objects.
 
 
When using weaving with JPA or POJO applications, you can use fetch groups to accomplish the same performance optimization.
 
 
For more information about partial object reading, see [http://wiki.eclipse.org/Introduction_to_EclipseLink_Queries_%28ELUG%29#Partial_Object_Queries Partial Object Queries].
 
 
For more information about fetch groups, see [http://wiki.eclipse.org/Introduction_to_Descriptors_%28ELUG%29#Fetch_Groups Fetch Groups].
 
 
----
 
----
 
 
''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