cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andrey Razumovsky <razumovsky.and...@gmail.com>
Subject Re: complex query vs performIteratedQuery vs Prefetching
Date Wed, 11 Nov 2009 14:02:16 GMT
Could you try iterating through list using counter variable (e.g. for (int i
= 0; i < list.size(); i++)) to see if it works?

2009/11/11 Hans Pikkemaat <h.pikkemaat@tsi-solutions.nl>

> 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
>>>
>>>
>>
>>
>>
>
>
>


-- 
Andrey

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