Jump to: navigation, search

Difference between revisions of "EclipseLink/Examples/JPA/QueryOptimization"

m (xrefs to elug)
Line 5: Line 5:
 
* [[Using_EclipseLink_JPA_Extensions_(ELUG)#Using_EclipseLink_JPA_Query_Customization_Extensions|Using EclipseLink JPA Query Customization Extensions]] in the ''[[EclipseLink/UserGuide|EclipseLink User's Guide]]''
 
* [[Using_EclipseLink_JPA_Extensions_(ELUG)#Using_EclipseLink_JPA_Query_Customization_Extensions|Using EclipseLink JPA Query Customization Extensions]] in the ''[[EclipseLink/UserGuide|EclipseLink User's Guide]]''
 
*[[Optimizing_the_EclipseLink_Application_%28ELUG%29#How_to_Use_Batch_and_Join_Reading_for_Optimization|How to Use Bach and Join Reading]] in the ''[[EclipseLink/UserGuide|EclipseLink User's Guide]]''
 
*[[Optimizing_the_EclipseLink_Application_%28ELUG%29#How_to_Use_Batch_and_Join_Reading_for_Optimization|How to Use Bach and Join Reading]] in the ''[[EclipseLink/UserGuide|EclipseLink User's Guide]]''
*org.eclipse.persistence.jpa.config.EclipseLinkQueryHints
+
*org.eclipse.persistence.config.QueryHints
  
  
Line 13: Line 13:
  
 
=== Via Annotations ===
 
=== Via Annotations ===
<code><pre>
+
<source lang="java">
 
@Entity
 
@Entity
 
@Table(name="JPA_EMPLOYEE")
 
@Table(name="JPA_EMPLOYEE")
Line 21: Line 21:
 
   hints={
 
   hints={
 
     @QueryHint(
 
     @QueryHint(
       name=EclipseLinkQueryHints.BATCH,  
+
       name=QueryHints.BATCH,  
 
       value="e.manager.phoneNumbers")
 
       value="e.manager.phoneNumbers")
 
   }
 
   }
Line 29: Line 29:
  
 
}
 
}
</pre></code>
+
</source>
  
 
=== Via XML ===
 
=== Via XML ===
<code><pre>
+
<source lang="xml">
 
<entity name="Employee" class="org.eclipse.testing.Employee" access="PROPERTY">
 
<entity name="Employee" class="org.eclipse.testing.Employee" access="PROPERTY">
 
   ...
 
   ...
Line 41: Line 41:
 
   ...
 
   ...
 
</entity>
 
</entity>
</pre></code>
+
</source>
  
 
== Joined Reading ==
 
== Joined Reading ==
Line 48: Line 48:
  
 
=== Via Annotations ===
 
=== Via Annotations ===
<code><pre>
+
<source lang="java">
 
@Entity
 
@Entity
 
@Table(name="JPA_EMPLOYEE")
 
@Table(name="JPA_EMPLOYEE")
Line 56: Line 56:
 
   hints={
 
   hints={
 
     @QueryHint(
 
     @QueryHint(
       name=EclipseLinkQueryHints.FETCH,  
+
       name=QueryHints.FETCH,  
 
       value="e.manager.phoneNumbers")
 
       value="e.manager.phoneNumbers")
 
   }
 
   }
Line 64: Line 64:
  
 
}
 
}
</pre></code>
+
</source>
  
 
=== Via XML ===
 
=== Via XML ===
<code><pre>
+
<source lang="xml">
 
<entity name="Employee" class="org.eclipse.testing.Employee" access="PROPERTY">
 
<entity name="Employee" class="org.eclipse.testing.Employee" access="PROPERTY">
 
   ...
 
   ...
Line 76: Line 76:
 
   ...
 
   ...
 
</entity>
 
</entity>
</pre></code>
+
</source>

Revision as of 15:03, 18 June 2008

EclipseLink allows users the option to optimize their queries using batch and joined reading through the use of a query hints.

See:


Batch Reading

Configures the query to optimize the retrieval of the related objects, the related objects for all the resulting objects will be read in a single query (instead of n queries). Valid values are strings that represent JPQL style navigations to a relationship. e.g. e.manager.phoneNumbers

Via Annotations

@Entity
@Table(name="JPA_EMPLOYEE")
@NamedQuery(
  name="findAllEmployees",
  query="SELECT e FROM Employee e order by e.id"),
  hints={
    @QueryHint(
      name=QueryHints.BATCH, 
      value="e.manager.phoneNumbers")
  }
)
public class Employee implements Serializable {
...
 
}

Via XML

<entity name="Employee" class="org.eclipse.testing.Employee" access="PROPERTY">
  ...
  <named-query name="findAllEmployees">
    <query>SELECT e FROM Employee e order by e.id</query>
    <hint name="eclipselink.batch" value="e.manager.phoneNumbers">
  </named-query>
  ...
</entity>

Joined Reading

Configures the query to optimize the retrieval of the related objects, the related objects will be joined into the query instead of being queried independently. This allow for nested join fetching which is not supported in JPQL. Valid values are strings that represent JPQL style navigations to a relationship. e.g. e.manager.phoneNumbers

Via Annotations

@Entity
@Table(name="JPA_EMPLOYEE")
@NamedQuery(
  name="findAllEmployeesByFirstName",
  query="SELECT OBJECT(employee) FROM Employee employee WHERE employee.firstName = :firstname"),
  hints={
    @QueryHint(
      name=QueryHints.FETCH, 
      value="e.manager.phoneNumbers")
  }
)
public class Employee implements Serializable {
...
 
}

Via XML

<entity name="Employee" class="org.eclipse.testing.Employee" access="PROPERTY">
  ...
  <named-query name="findAllEmployeesByFirstName">
    <query>SELECT OBJECT(employee) FROM Employee employee WHERE employee.firstName = :firstname</query>
    <hint name="eclipselink.join-fetch" value="e.manager.phoneNumbers">
  </named-query>
  ...
</entity>