Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[eclipselink-users] Dynamic FetchGroup usage

Hello.
I'm trying to use the new FetchGroup feature in EclipseLink.
Maybe I'm not understanding the API, but from what I read, I understand that
you can create a FetchGroup dynamically at the query level in an Entity Bean
without a FetchGroupManager specifically defined in the Descriptor
Customizer.

This is what my code looks like:
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
        if (!queryObject.getUnmodifiablePartialAttributes().isEmpty()) {
            final FetchGroup fetchGroup = new FetchGroup();
            for (String partialAttribute :
queryObject.getUnmodifiablePartialAttributes()) {
                fetchGroup.addAttribute(partialAttribute);
            }
            readAllQuery.setFetchGroup(fetchGroup);
        }
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

When I run the application, I get the following
org.eclipse.persistence.exceptions.QueryException:
"You must define a fetch group manager at descriptor (...) in order to set a
fetch group on the query (...)"

Debugging the code I see the following in ObjectLevelReadQuery.java
(2015-2043):
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    public void prepareFetchGroup() throws QueryException {
        FetchGroupManager fetchGroupManager =
this.descriptor.getFetchGroupManager();
        if (fetchGroupManager != null) {
            if(this.fetchGroup == null) {
                if(this.fetchGroupName != null) {
                    this.fetchGroup =
fetchGroupManager.getFetchGroup(this.fetchGroupName);
                }
            }
            // that may be either fetchGroup or defaultFetchGroup from
descriptor
            FetchGroup executionFetchGroup = getExecutionFetchGroup();
            if(executionFetchGroup != null) {
                if (hasPartialAttributeExpressions()) {
                    //fetch group does not work with partial attribute
reading
                    throw
QueryException.fetchGroupNotSupportOnPartialAttributeReading();
                }
                if(this.fetchGroup != null) {
                   
this.descriptor.getFetchGroupManager().prepareAndVerify(this.fetchGroup);
                    this.entityFetchGroup =
fetchGroupManager.getEntityFetchGroup(this.fetchGroup);
                } else {
                    this.entityFetchGroup = null;
                }
            }
        } else {
            // FetchGroupManager is null
            if(this.fetchGroup != null || this.fetchGroupName != null) {
                throw
QueryException.fetchGroupValidOnlyIfFetchGroupManagerInDescriptor(getDescriptor().getJavaClassName(),
getName());
            }
        }
    }
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

From this code I understand that a FetchGroupManager would be specified in
the class descriptor, but that isn't what I expect from the API.

Is this a BUG or should I specify a fetchgroupmanager for all the classes I
expect to use a dynamic fetchgroup?

Regards
--
Marc Nuri
-- 
View this message in context: http://old.nabble.com/Dynamic-FetchGroup-usage-tp30328424p30328424.html
Sent from the EclipseLink - Users mailing list archive at Nabble.com.



Back to the top