Skip to main content

[jpa-spec issues] [JIRA] Resolved: (JPA_SPEC-26) Add fetch profile support for queries

  • From: "ldemichiel (JIRA)" < >
  • To:
  • Subject: [jpa-spec issues] [JIRA] Resolved: (JPA_SPEC-26) Add fetch profile support for queries
  • Date: Fri, 18 Jan 2013 00:45:53 +0000 (GMT+00:00)
  • Auto-submitted: auto-generated


     [ 
http://java.net/jira/browse/JPA_SPEC-26?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

ldemichiel resolved JPA_SPEC-26.
--------------------------------

    Resolution: Fixed

This is now addressed by the entity group functionality.  Entity groups can 
specify fetch plans for queries.


> Add fetch profile support for queries
> -------------------------------------
>
>                 Key: JPA_SPEC-26
>                 URL: http://java.net/jira/browse/JPA_SPEC-26
>             Project: jpa-spec
>          Issue Type: New Feature
>            Reporter: c.beikov
>         Attachments: FetchProfile.java, FetchUtil.java, FetchUtilTest.java
>
>
> The spec currently does not provide a possibillity to add additional join 
> fetches for an existing query.
> Queries that have only one driving table/entity like,
> {code:jpql}
> FROM Entity e JOIN FETCH e.relation
> {code}
> could also be written as,
> {code:jpql}
> FROM Entity e
> {code}
> and be transformed by providing the property paths at runtime.
> The property path for this example would be *relation*.
> I suggest to add the following method:
> {code:title=Query.java|borderStyle=solid}
> public interface Query{
>   // currently available methods...
>   public Query fetch(String... propertyPath);
> }
> {code}
> A basic query could then be transformed at runtime to fit the needs of the 
> requester of objects.
> A basic service method that returns a list of objects could be extended to 
> provide the option of passing the property paths as parameters like:
> {code:java}
> public class BasicService{
>   @PersistenceContext
>   private EntityManager em;
>   public List<Entity> getEntities(Integer forUserId){
>     // default fetching
>     // expected query is "FROM Entity e JOIN FETCH e.relation WHERE 
> e.userId = :userId"
>     return getEntities(forUserId, "relation");
>   }
>   public List<Entity> getEntities(Integer forUserId, String... 
> propertyPaths){
>     // using the given property paths
>     return em.createQuery("FROM Entity e WHERE e.userId = :userId")
>              .setParameter("userId", forUserId)
>              .fetch(propertyPaths)
>              .getResultList();
>   }
> }
> {code}
> If you have two views for example, that would like to use that service, but 
> one view needs an additional relation to be fetched, you would have to copy 
> the method with all of the code and fetch the needed relation within the 
> copied method. The suggested approach of using property paths for fetching 
> relations would reduce the total number of queries and methods needed in an 
> application.
> Additionally a more type safe approach could be provided by using the 
> static metamodel, but I did not thought through that one. I am not sure if 
> deep paths, like *relation.anotherRelation.yetAnotherRelation* could be 
> represented when using static metamodel, but at least with strings it is 
> possible.
> Hibernate already has a simmilar feature, but it is not as flexible as this 
> approach would be(also see 
> http://docs.jboss.org/hibernate/orm/3.5/reference/en/html/performance.html#performance-fetching-profiles).

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://java.net/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


[jpa-spec issues] [JIRA] Resolved: (JPA_SPEC-26) Add fetch profile support for queries

ldemichiel (JIRA) 01/18/2013
 
 
Close
loading
Please Confirm
Close