getCollectionByQuery(q) is not the correct method call for a Report Query. Try broker.getReportQueryIteratorByQuery(q); which returns an Iterator of Object[].
-----Original Message----- From: Ian Hunter [mailto:[EMAIL PROTECTED] Sent: Thursday, September 30, 2004 12:17 PM To: [EMAIL PROTECTED]; OJB Users List Subject: Re: Simple DISTINCT query Like this? (This is what failed) public static Collection getAllBillDates (AuthorizedUser user) throws PersistenceException, PermissionDeniedException { Criteria c = new Criteria(); ReportQueryByCriteria q = QueryFactory.newReportQuery (BillItem.class, c, true); q.setAttributes(new String[] { "billingRun" }); q.addOrderByDescending("billingRun"); DataStore ds = new DataStore (user); Collection result = ds.getCollectionByQuery(q); // <--- exception is thrown here ArrayList dates = new ArrayList(); Iterator i = result.iterator(); while (i.hasNext()) { BillItem bi = (BillItem) i.next(); dates.add (bi.getBillingRun()); } return dates; } The "datastore" object wraps calls to the PB API. You can see a call to "getCollectionByQuery" which basically calls "getCollectionByQuery" and catches PersistenceBrokerExceptions and redefines them as generic-to-application "PersistenceException" objects. The actual object definition is this: <class-descriptor class="BillItem" table="BILLITEM"> <field-descriptor name="id" column="ID_BILLITEM" jdbc-type="INTEGER" primarykey="true" autoincrement="true" /> <field-descriptor name="fkService" column="FK_SERVICE" jdbc-type="INTEGER" nullable="false"/> <reference-descriptor name="service" class-ref="Service" auto-retrieve="true" auto-update="none" auto-delete="none"> <foreignkey field-ref="fkService"/> </reference-descriptor> <field-descriptor name="billingRun" column="BILLING_RUN" jdbc-type="TIMESTAMP" conversion="org.apache.ojb.broker.accesslayer.conversions.JavaDate2SqlTi mest ampFieldConversion" /> <field-descriptor name="amount" column="AMOUNT" jdbc-type="FLOAT" nullable="false" /> <field-descriptor name="notes" column="NOTES" jdbc-type="VARCHAR" nullable="false" /> <field-descriptor name="category" column="CATEGORY" jdbc-type="VARCHAR" nullable="false" /> <field-descriptor name="locked" column="LOCKED" jdbc-type="BIT" conversion="org.apache.ojb.broker.accesslayer.conversions.Boolean2IntFie ldCo nversion" nullable="false" /> </class-descriptor> The error I got was: Caused by: org.apache.ojb.broker.PersistenceBrokerException: Error reading class type: BillItem from result set, current read field was amount at org.apache.ojb.broker.accesslayer.RowReaderDefaultImpl.readValuesFrom(Ro wRea derDefaultImpl.java:205) at org.apache.ojb.broker.accesslayer.RowReaderDefaultImpl.readObjectArrayFr om(R owReaderDefaultImpl.java:176) at org.apache.ojb.broker.accesslayer.RsIterator.getObjectFromResultSet(RsIt erat or.java:427) at org.apache.ojb.broker.accesslayer.RsIterator.next(RsIterator.java:265) at org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Que ryRe ferenceBroker.java:121) at org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Que ryRe ferenceBroker.java:232) ... 89 more Caused by: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Invalid column name: AMOUNT at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source) at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source) at com.microsoft.jdbc.base.BaseResultSet.getColumnOrdinal(Unknown Source) at com.microsoft.jdbc.base.BaseResultSet.getDouble(Unknown Source) at org.apache.ojb.broker.util.JdbcTypesHelper$T_Float.readValueFromResultSe t(Jd bcTypesHelper.java:773) at org.apache.ojb.broker.util.JdbcTypesHelper$BaseType.getObjectFromColumn( Jdbc TypesHelper.java:302) at org.apache.ojb.broker.util.JdbcTypesHelper$BaseType.getObjectFromColumn( Jdbc TypesHelper.java:281) at org.apache.ojb.broker.accesslayer.RowReaderDefaultImpl.readValuesFrom(Ro wRea derDefaultImpl.java:199) ... 94 more So why is it referring to "amount" at all? ----- Original Message ----- From: "Stijn de Witt" <[EMAIL PROTECTED]> To: "OJB Users List" <[EMAIL PROTECTED]> Sent: Thursday, September 30, 2004 12:33 PM Subject: Re: Simple DISTINCT query > Look at ReportQueries, they are part of the PersistenceBroker interface > and let you perform selects where the result is not a complete object. > > -Stijn > > Ian Hunter wrote: > > >I've been pulling my ahir out trying to accomplish something simple. Say I > >have a table called FOO, with fields FOOID (int), FOODATE (datetime), and > >FOOAMOUNT (double). Some process writes data to this table, where FOOID is > >a autoincrement field, FOODATE is a datestamp, for which there can be > >duplicates, and FOOFOO which represents some number. > > > >I want to generate this query: SELECT DISTINCT FOODATE FROM FOO; -- I can't > >figure out how to do this, because it seems like OBJ is wanting to load all > >the fields from the resulting query, including ones I don't need, such as > >FOOAMOUNT. > > > >How do I do this? > > > >--- > >beati pacifici quoniam filii Dei vocabuntur > > > > > >--------------------------------------------------------------------- > >To unsubscribe, e-mail: [EMAIL PROTECTED] > >For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]