Hi all.
I’m encountering some weirdness when running EJBQLQuery. Consider the following
code:
EJBQLQuery q = new EJBQLQuery( "select i.unitPrice,i.quantity from
InvoiceLine i where i.companyNumber='0100008338'" );
List fetchedRows = objectContext.performQuery( q );
System.out.println( "Size of resulting list: " + fetchedRows.size() );
System.out.println( "Class of fetched objects: " + fetchedRows.get( 0
).getClass() );
This generates the following output:
- --- transaction started.
- SELECT t0.unit_price AS sc0, t0.quantity AS sc1 FROM bok_invoice_line
t0 WHERE t0.company = ? [bind: 1:'0100008338']
- === returned 508 rows. - took 72 ms.
- +++ transaction committed.
Size of resulting list: 200
Class of fetched objects: class [Ljava.lang.Object;
As you can see, the SQL is correct, and the debug log shows that the DB returns
the expected number of 508 objects. However, the resulting List will only
contain 200 objects. This number will then go on to change in weird ways if I
modify the query, for example if I add a third attribute to fetch, the List
will suddenly contain 204 objects—and that number may change based on which
attribute I added. Quite odd, and I’ve not been able to identify any rule to
how it happens.
Now, for the second level of weirdness: If I change the query to fetch data
rows (by invoking setFetchingDataRows( true )), the list will end up containing
the correct number of rows. But they will still be Object[] but not DataRows.
- --- transaction started.
- SELECT t0.unit_price AS sc0, t0.quantity AS sc1 FROM bok_invoice_line
t0 WHERE t0.company = ? [bind: 1:'0100008338']
- === returned 508 rows. - took 64 ms.
- +++ transaction committed.
Size of resulting list: 508
Class of fetched objects: class [Ljava.lang.Object;
Any idea what’s happening? Thought I’d ask before I start digging around.
Cheers,
- hugi