Ok. I'll probably be using HSQLDB to test it. You can either send me the *.script file from an hsqldb database or a dbunit xml flatfile so I can load the test data. I suppose you can send me some raw inserts and that will probably work too. Or have your example code create the test data.
On 1/18/07, Mike Kienenberger <[EMAIL PROTECTED]> wrote:
This is pure speculation, but maybe it has something to do with path splitting. In that case, using the outer join patches I posted will probably fix it. You'd have to convert the patch from the 1.2 packages to the 2.0 packages, though. Or if you created a simple 1.2 example demonstrating the problem, I could check the output under 1.2 with the outer join patch installed. I vaguely seem to recall hitting and fixing self-join issues when I was working on the outer join patch. On 1/18/07, Andrus Adamchik <[EMAIL PROTECTED]> wrote: > Hmm... looks like a bug in the prefetch code. Could you possible open > a bug report, somebody will take a look. > > http://issues.apache.org/cayenne > > Thanks > Andrus > > > On Jan 18, 2007, at 11:14 AM, Patric Lichtsteiner wrote: > > > > > Hi > > > > I'm using Cayenne 2.0.1 and I'm working with a model with a self join > > like this: > > > > <db-entity name="PathElement"> > > <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" > > isMandatory="true"/> > > <db-attribute name="Name" type="VARCHAR" isMandatory="true" > > length="100"/> > > <db-attribute name="ParentPathElementId" type="INTEGER"/> > > </db-entity> > > > > <db-relationship name="parentPathElement" source="PathElement" > > target="PathElement" toMany="false"> > > <db-attribute-pair source="ParentPathElementId" target="ID"/> > > </db-relationship> > > <db-relationship name="subPathElements" source="PathElement" > > target="PathElement" toMany="true"> > > <db-attribute-pair source="ID" target="ParentPathElementId"/> > > </db-relationship> > > > > <obj-entity name="PathElement" > > className="com.encodo.test.cayenne.PathElement" > > dbEntityName="PathElement"> > > <obj-attribute name="name" type="java.lang.String" > > db-attribute-path="Name"/> > > </obj-entity> > > > > <obj-relationship name="parentPathElement" source="PathElement" > > target="PathElement" db-relationship-path="parentPathElement"/> > > <obj-relationship name="subPathElements" source="PathElement" > > target="PathElement" db-relationship-path="subPathElements"/> > > > > The database scheme and the classes are correctly generated with this > > definition. Inserting data with java code also works without problems, > > but executing a query does not work as I would expect it (the database > > contains a root PathElement and 2 sub PathElements): > > SelectQuery pathElementQuery = new SelectQuery(PathElement.class, > > Expression.fromString("parentPathElement = null")); > > pathElementQuery.addPrefetch("subPathElements"); > > List<PathElement> rootPathElements = > > _context.performQuery(pathElementQuery); > > //Root element is found > > List<PathElement> subPathElements = > > rootPathElements.get(0).getSubPathElements(); > > //subPathElements.size() is 0, that's wrong! > > > > The following queries are executed by Cayenne: > > SELECT t0.Name, t0.ParentPathElementId, t0.ID FROM PathElement t0 > > WHERE > > t0.ParentPathElementId IS NULL > > SELECT t0.Name, t0.ParentPathElementId, t0.ID FROM PathElement t0, > > PathElement t1 WHERE t0.ParentPathElementId = t1.ID AND > > (t0.ParentPathElementId IS NULL) > > > > IMHO, this query is wrong. The condition should be: > > t1.ParentPathElementId IS NULL > > > > What is going wrong here? Has anybody an idea? > > > > Thanks a lot > > Patric > > > >