cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Hans Pikkemaat <h.pikkem...@tsi-solutions.nl>
Subject Re: complex query vs performIteratedQuery vs Prefetching
Date Wed, 11 Nov 2009 13:50:26 GMT
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
>>     
>
>   



Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message