Andrus,
No problem, thank you for your reply!
I am able to produce this bug without calling add at all. Simply calling
remove and then committing before calling anything else causes this behaviour.
That is good to know about 3.0.2, but unfortunately it does not solve my
problem. I tried the 3.1 beta build hoping it would fix the problem when I
first
discovered it, but it did not. This morning, after I read your email, I tried
3.0.2 and the problem still exists.
Any help would be greatly appreciated.
Thank you!
Aaron
On July 12, 2012 02:07:43 PM Andrus Adamchik wrote:
> Hi Aaron,
>
> sorry for the late reply..
>
> Are add... and remove... called in sequence after each other or is there a
> commit between them?
>
> Also going through release notes for 3.0.2, there were a few fixes related
> to flattened relationships. While I can't say for sure that your issue was
> addressed there, maybe it is worth upgrading before we dig any deeper?
>
> Cheers,
> Andrus
>
> On Jul 5, 2012, at 4:23 AM, Aaron Andersen wrote:
> > Hello,
> >
> > I am using Cayenne version 3.0.1 and having an issue.
> >
> > In CayenneModeler I have created an "Approver" DbEntity and a "Department"
> > DbEntity (as well as the corresponding ObjEntity classes). I have also
> > created an "Authorization" DbEntity to act as a join table for the
> > Approver and Department tables. Every Approver object has a list of
> > Department objects associated with it, and vice versa so in
> > CayenneModeler I have added a "departmentArray" relationship to the
> > Approver object which has "to many, list" semantics.
> >
> > When I use the Approver method "void addToDepartmentArray (Department)"
> > everything works fine, but when I use the Approver method "void
> > removeFromDepartmentArray (Department)" (which simple calls
> > removeToManyTarget) a NullPointerException is thrown. A backtrace and
> > quick
> > debug tells me the null pointer exception originates from:
> >
> > org.apache.cayenne.access.DataDomainFlattenedBucket.addFlattenedDelete(Dat
> > aDomainFlattenedBucket.java:82)
> >
> > The code on lines 81 and 82 of this file are as follows:
> >
> > [81] List flattenedSnapshots =
> > flattenedDeleteInfo.buildJoinSnapshotsForDelete(node);
> > [82] if (!flattenedSnapshots.isEmpty()) {
> >
> > Inspecting flattenedSnapshots on line 82 shows that flattenedSnapshots is
> > null hence accessing the isEmpty method is causing the null pointer
> > exception.
> >
> > A couple of obvious points I can list off are:
> > - both the approver and the department are not null
> > - the department does belong to the approvers list of departments
> > - both objects are in the same context
> >
> > I'm not sure what I am doing incorrect to cause this null pointer
> > exception
> > but I would really appreciate any help.
> >
> > Thank you for your time!
> > Aaron