I’ve been working with a fairly simple data model that has an
Organization object which contains some String members as well as a
member variable of type PrivilegedUser.  And PrivilegedUser extends a
User, and contains only a Key and some String members.

@PersistenceCapable(identityType = IdentityType.APPLICATION,
detachable="true")
public class Organization implements Serializable {

        @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
        private Long id;


        @Persistent
    private String organizationId;

    @Persistent
    private String organizationName;


    @Persistent
     private PrivilegedUser privilegedUser;

….

I have code running successfully under 1.2.2 which creates an
Organization, then creates a Privileged User object, and assigns it to
the Organization, and then makes the Organization persistent.
Later I query by organizationId to retrieve the Organization object,
and update the PrivilegedUser on the Organization object.
This works fine under 1.2.2.

Under 1.2.5 I began getting the following error:
You have just attempted to access field "privilegedUser" yet this
field was not detached when you detached the object. Either dont
access this field, or detach it when detaching the object.

However, after stepping through the debugger I believe the root cause
is that the privilegedUser field is null on the Organization object
returned from the query (the String members are still correct).  This
value is null even before I attempt to detach the Organization object
from the PersistenceManager.

After seeing this behavior I modified the query code I had been using
to include a custom fetch plan for the query.
This did not change the behavior under 1.2.5.

               PersistenceManager pm = PMF.get().getPersistenceManager
();


                FetchGroup fetchGroup = pm.getFetchGroup(Organization.class,
"OrganizationGroup");
                fetchGroup.addMember("privilegedUser");

                // Add this group to the fetch plan (using its name)
                FetchPlan fetchPlan = pm.getFetchPlan();
                fetchPlan.addGroup("OrganizationGroup");

                Query query = pm.newQuery(Organization.class);
                query.setFilter("organizationId == rhsValue");
                query.declareParameters("String rhsValue");



I don't think the following is relevant, but I’ve also noticed that
under 1.2.5 the following exception occurs, which has been reported by
others:

INFO: Failed to start reference finalizer thread. Reference cleanup
will only occur when new references are
created.java.lang.reflect.InvocationTargetException

Does this sound like a bug introduced under 1.2.5, or is this expected
behavior that was not enforced under 1.2.2?  In either case, does
anyone have a suggestion on how to work around this issue?

Thanks,
David


--~--~---------~--~----~------------~-------~--~----~
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 google-appengine-java@googlegroups.com
To unsubscribe from this group, send email to 
google-appengine-java+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to