Re: complex query vs performIteratedQuery vs Prefetching

From: Hans Pikkemaat (h.pikkemaa..si-solutions.nl)
Date: Wed Nov 11 2009 - 08:50:26 EST

  • Next message: Andrus Adamchik: "Re: Object Caching"

    Hi,

    This is the 'working' part

            System.out.println("Running with fetchlimit: " + pageSize);
            final DataContext dataContext = this.createDataContext();

            SQLTemplate query = new SQLTemplate(VersionedObjectImpl.class, sql);
            query.addPrefetch(_VersionedObjectImpl.ATTRIBUTES_PROPERTY);

            if (pageSize > 0) {
                query.setPageSize(pageSize);
            }
            List<VersionedObjectImpl> list = dataContext.performQuery(query);

            for (Iterator<VersionedObjectImpl> iterator = list.iterator();
    iterator.hasNext();) {
                this.show(iterator.next());
            }

    VersionedObjectImpl.class is the main table and the
    VersionedobjectImpl.ATTRIBUTES_PROPERTY
    is the relation name for the detail table.

    The sql provided is (my own made simple 'try out' query, the actual
    query is WAY more complex)

    select o.object_id as "OBJECT_ID",
    o.ancestor_path as "ANCESTOR_PATH", o.object_type as
    "OBJECT_TYPE", o.object_identifier as
    "OBJECT_IDENTIFIER", o.created_revision_id as
    "CREATED_REVISION_ID", o.deleted_revision_id as
    "DELETED_REVISION_ID", a.attribute_id as
    "attributes.ATTRIBUTE_ID", a.name as "attributes.NAME",
    a.type_name as "attributes.TYPE_NAME",
    a.string_value as "attributes.STRING_VALUE",
    a.integer_value as "attributes.INTEGER_VALUE",
    a.date_value as "attributes.DATE_VALUE" from rev_object o left
    join rev_attribute a on a.object_id=o.object_id

    If I run this without page size no problem.
    With page size set eg to 100 I get

    Exception in thread "main" org.apache.cayenne.CayenneRuntimeException:
    [v.3.0B1 Nov 09 2009 09:53:47] Some ObjectIds are missing from the
    database. Expected 100, fetched 85
        at
    org.apache.cayenne.access.IncrementalFaultList.checkPageResultConsistency(IncrementalFaultList.java:364)
        at
    org.apache.cayenne.access.IncrementalFaultList.resolveInterval(IncrementalFaultList.java:301)
        at
    org.apache.cayenne.access.IncrementalFaultList.get(IncrementalFaultList.java:550)
        at
    org.apache.cayenne.access.IncrementalFaultList$1.next(IncrementalFaultList.java:467)
        at
    com.traserv.incrementalsupply.integration.demo.CayenneDemo.doit1a(CayenneDemo.java:188)
        at
    com.traserv.incrementalsupply.integration.demo.CayenneDemo.main(CayenneDemo.java:235)

    tx

    Hans

    Andrus Adamchik wrote:
    > You may have done that already in the previous messages, but could you
    > give a snip of your SQLTemplate creation code here (just to make sure
    > I understand all the settings used in this specific case). And also if
    > possible, SQL generated in the console for the initial query, and then
    > for the failing page query?
    >
    > Thanks,
    > Andrus
    >
    >
    > On Nov 11, 2009, at 2:51 PM, Hans Pikkemaat wrote:
    >
    >
    >> Hi,
    >>
    >> I tried 3.0b but without effect.
    >>
    >> If I use an SQLTemplate in combination with setPageSize I also get
    >> the exception mentioned earlier:
    >>
    >> Exception in thread "main"
    >> org.apache.cayenne.CayenneRuntimeException: [v.3.0B1 Nov 09 2009
    >> 09:53:47] Some ObjectIds are missing from the database. Expected
    >> 100, fetched 85
    >> at
    >> org
    >> .apache
    >> .cayenne
    >> .access
    >> .IncrementalFaultList
    >> .checkPageResultConsistency(IncrementalFaultList.java:364)
    >> at
    >> org
    >> .apache
    >> .cayenne
    >> .access
    >> .IncrementalFaultList.resolveInterval(IncrementalFaultList.java:301)
    >> at
    >> org
    >> .apache
    >> .cayenne.access.IncrementalFaultList.get(IncrementalFaultList.java:
    >> 550)
    >> at org.apache.cayenne.access.IncrementalFaultList
    >> $1.next(IncrementalFaultList.java:467)
    >> at
    >> com
    >> .traserv
    >> .incrementalsupply
    >> .integration.demo.CayenneDemo.doit1(CayenneDemo.java:136)
    >> at
    >> com
    >> .traserv
    >> .incrementalsupply
    >> .integration.demo.CayenneDemo.main(CayenneDemo.java:183)
    >>
    >> If I use a SelectQuery it works oke. But this is not an option for
    >> me because I cannot construct
    >> my query using SelectQuery because of its complexity.
    >>
    >> Any ideas?
    >>
    >> tx
    >>
    >> Hans
    >>
    >
    >



    This archive was generated by hypermail 2.0.0 : Wed Nov 11 2009 - 08:51:09 EST