db-jdo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Matthew T. Adams" <matthew.ad...@xcalia.com>
Subject RE: [IMPORTANT] Fetch-depth
Date Thu, 26 Jan 2006 00:22:41 GMT
See comments inline...

-----Original Message-----
From: Craig.Russell@Sun.COM [mailto:Craig.Russell@Sun.COM] 
Sent: Wednesday, January 25, 2006 11:54 AM
Cc: JDO Expert Group; Apache JDO project
Subject: Re: [IMPORTANT] Fetch-depth


Here's what I'm proposing, in summary. 

1. Add a property to FetchPlan: get/setMaxFetchDepth. This property limits
the depth of the fetched instance graph counting from the root of the
instances. The roots are defined for queries as the results of the query.
The roots of retrieve and detachCopy are the parameter instances. The
default is 1, meaning fetch one level of objects reachable from the roots. A
value of 0 has no meaning, because if a relationship field is in the fetch
group, it will be fetched.

Don't forget that the roots are also the parameter instances of refresh, in
addition to retrieve and detachCopy.  Setting a value of 0 for maxFetchDepth
should throw JDOUserException.  

2. Add a property to FetchPlan: get/setDetachRoots. The roots for
DetachAllOnCommit are all the instances in the DetachRoots on FetchPlan. The
default is all instances in the cache. Or it could be all instances
retrieved by queries, explicitly made persistent, or explicitly retrieved.

I'd advocate a slight change in the name to get/setDetachmentRoots.  It
would be nice to be able to have a convenient method overload for
setDetachmentRoots(Class pcClass) and/or getDetachmentRoots(Class[]
pcClasses) so that users could easily specify all instances of a specific
class or set of classes.

3. In order to avoid confusion, remove fetch-depth attribute for the field
element and replace it with recursion-depth attribute. This has two effects:
it requires users to change their metadata and think about what the
fetch-depth was used for; and it better reflects the purpose of the
attribute to limit recursion. The meaning of recursion-depth is the maximum
number of links to follow from the target instance of this field in case the
same class is encountered again. 

How does inheritance affect this?  It seems to me that this should also
apply when the the target field's class is the same as or a subclass of the
field's class.

4. In case of multiple definitions of the same field recursion-depth, the
largest number for the same field will be used. That is, if the same field
is declared in multiple fetch groups, a simple MAX of all the values is

I'll write up a number of examples and send them tomorrow.



On Jan 13, 2006, at 3:10 PM, Craig L Russell wrote:


I've spent some time looking at the semantics of fetch-depth and now agree
with the critics of the change that I proposed back in the infamous October
1, 2005 message to the expert group subject: Re: JDO2 ยง12.7.2: fetch-depth
only for "recursive fetch group references"?.

I now believe it's impractical to use fetch-depth to mean the maximum depth
of the object graph reachable from the root object(s) field because of
several messages sent on the subject by Joerg von Frantzuis, Alexander
Bieber, and Marco Schultz.

Briefly, the argument is that if fetch-depth limits the number absolutely,
then it's not possible easily to use the fetch-group to add another field to
a fetch plan simply by adding a fetch-group that includes that field.
Instead, a new fetch-group that changes the fetch-depth must be used. And
each new use-case needs to provide a different fetch-depth number if another
level of fetching is desired.

I believe that the use of fetch-group to determine whether fields
(navigating relationships) are fetched should be natural, and that we should
therefore use fetch-depth for its original purpose of limiting recursion.

If you disagree with this position, please reply so we can move forward and
define the use of fetch-depth for recursion (as in the original semantics of
the attribute).



Craig Russell
Architect, Sun Java Enterprise System http://java.sun.com/products/jdo
408 276-5638 mailto:Craig.Russell@sun.com
P.S. A good JDO? O, Gasp!

Craig Russell

Architect, Sun Java Enterprise System http://java.sun.com/products/jdo

408 276-5638 mailto:Craig.Russell@sun.com

P.S. A good JDO? O, Gasp!

  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message