Hi, i didnt have the element

 <property name="datanucleus.maxFetchDepth" value="1"/>

in the jdoconfig.xml file, but i added it with a value of 2 and it
indeed solved the problem.

I was about to use your suggestion, but since the fecth depth worked,
for now this is all i need!

Thanks alot for your help, you saved me a lot of work!

On Apr 7, 4:13 pm, Ian Marshall <[email protected]> wrote:
> The problem could be due to fetch depth. In my jdoconfig.xml file, I
> have
>
>   <property name="datanucleus.maxFetchDepth" value="1"/>
>
> which is the default value.
>
> I use transactions for my data exchange with the datastore using JDO
> for everything except queries which can return entities from more than
> one entity group.
>
> What I do is:
>
>   ·  Retrieve or get an instance of A.
>   ·  "Touch" = retrieve the instance of B from A (A.getB()?)
>   ·  "Touch" = retrieve the instance of C from B (B.getC()?)
>
> whilst in the transaction and before detaching. Then you should have
> what you need.
>
> What I do (and it's not optimised but it works) is have a generalised
> business method like
>
>   /**
>    * For each object in the list supplied, fetches explicitly all
> fields
>    * which represent either persistent objects or lists (of any
> object),
>    * in order to force their loading into the persistent object.
>    * This method traverses one generation only in each direction.
>    * (To traverse another generation, a fresh call to the database
>    * will be needed to yield the relevant object(s) from the correct
>    * source generation.)
>    * @param liList The list of persistence objects to be traversed.
>    */
>   private static void fetchChildAndParentFields(ArrayList liList)
>   {
>     ListIterator iterList = liList.listIterator();
>
>     while (iterList.hasNext())
>     {
>       Object obj = iterList.next();
>
>       if (obj instanceof User)
>       {
>         User user = (User)obj;
>
>         ArrayList<UserDetails> liUserDetails = user.getUserDetails();
>         if (liUserDetails != null)
>           liUserDetails.size();
>
>         ImageDataTemp idtImageDataTemp = user.getImageDataTemp();
>
>         ArrayList<CommissionReceived> liCommissionsReceived =
>          user.getCommissionsReceived();
>         if (liCommissionsReceived != null)
>           liCommissionsReceived.size();
>       }
>       else if ...
>       ...
>     }
>   }
>
> which is called within the transaction before detachment. I then know
> that I have got the next layer of objects already fetched and ready
> for use and abuse.
>
> On Apr 7, 1:19 pm, Neto <[email protected]> wrote:
>
>
>
>
>
>
>
> > I have a mistake above: by
>
> > I retrieve a "A" object and than detach it. I can acess the listB field just
> > fine, but when i try to acess the* working hours*, i get the following
> > error:
>
> > e mean
>
> > I retrieve a "A" object and than detach it. I can acess the listB field just
> > fine, but when i try to acess the *listC*, i get the following error:

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine for Java" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en.

Reply via email to